.net c#:如何使用枚举来存储字符串常量?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1851567/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 13:37:27  来源:igfitidea点击:

c#:How to use enum for storing string constants?

.netstringconstantsenums

提问by Maddy.Shik

Possible Duplicate:
Enum with strings

可能的重复:
带字符串的枚举

is is possible to have string constants in enum like

可以在枚举中使用字符串常量,例如

      enum{name1="hmmm" name2="bdidwe"}

if it is not so what is best way to do so?

如果不是这样,最好的方法是什么?

I tried it its not working for string so right now i am grouping all related constnats in one class like

我试过它不适用于字符串,所以现在我将所有相关的 constnats 分组在一个类中,例如

      class operation
      {
          public const string  name1="hmmm";
          public const string  name2="bdidwe"
      }

回答by R. Martinho Fernandes

Enum constants can only be of ordinal types (intby default), so you can't have string constants in enums.

枚举常量只能是序数类型(int默认情况下),因此枚举中不能有字符串常量。

When I want something like a "string-based enum" I create a class to hold the constants like you did, except I make it a static class to prevent both unwanted instantiation and unwanted subclassing.

当我想要“基于字符串的枚举”之类的东西时,我会像您一样创建一个类来保存常量,但我将其设为静态类以防止不需要的实例化和不需要的子类化。

But if you don't want to use string as the type in method signatures and you prefer a safer, more restrictive type (like Operation), you can use the safe enum pattern:

但是,如果您不想在方法签名中使用 string 作为类型,并且您更喜欢更安全、更具限制性的类型(如Operation),则可以使用安全枚举模式:

public sealed class Operation
{
    public static readonly Operation Name1 = new Operation("Name1");
    public static readonly Operation Name2 = new Operation("Name2");

    private Operation(string value)
    {
        Value = value;
    }

    public string Value { get; private set; }
}

回答by Taylor Leese

You could do this using DescriptionAttribute, but then you'd have to write code to get the string out of the attribute.

您可以使用 来执行此操作DescriptionAttribute,但随后您必须编写代码才能从属性中获取字符串。

public enum YourEnum
{
    [Description("YourName1")]
    Name1,

    [Description("YourName2")]
    Name2
}

回答by Robert Giesecke

The whole point of enums is to be ordinal constants.
However, you can achieve what you want by using an extension method:

枚举的全部意义在于是序数常量。
但是,您可以通过使用扩展方法来实现您想要的:

  enum Operation
  {
      name1,
      name2
  }

  static class OperationTextExtender
  {
        public static String AsText(this Operation operation)
        {
              switch(operation)
              {
                    case Operation.name1: return "hmmm";
                    case Operation.name2: return "bdidwe";
                    ...
              }
        }
  }

  ...
  var test1 = Operation.name1;
  var test2 = test1.AsText();   

回答by John Weldon

Your operationclass won't compile as is... you didn't declare the type of name1 and name2...

您的operation类不会按原样编译...您没有声明 name1 和 name2 的类型...

But that is the approach I'd take... yes.

但这就是我要采取的方法……是的。

If you make it a struct then it becomes a value type which may or may not be what you wanted...

如果你把它变成一个结构体,那么它就会变成一个值类型,它可能是你想要的,也可能不是你想要的......