.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
c#:How to use enum for storing string constants?
提问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...
如果你把它变成一个结构体,那么它就会变成一个值类型,它可能是你想要的,也可能不是你想要的......

