我正在尝试为枚举分配一个字符串。类似下面的例子:
enum MyEnum
{
frist = "First Value",
second = "Second Value",
third = "Third Value"
}
所以我可以在我的代码中使用这样的东西:
MyEnum enumVar = MyEnum.first;
...
string enumValue = EnumVar.ToString();//returns "First Value"
以传统的方式,当我创建一个枚举时,ToString()将返回枚举名称而不是其值。所以这是不可取的,因为我正在寻找一种方法来分配一个字符串值,然后从一个字符串值中获取枚举。
答案 0 :(得分:19)
您可以在枚举中添加Description属性。
enum MyEnum
{
[Description("First Value")]
frist,
[Description("Second Value")]
second,
[Description("Third Value")]
third,
}
然后有一个方法来返回你的描述。
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
然后你可以这样做:
MyEnum enumVar = MyEnum.frist;
string value = GetEnumDescription(enumVar);
值将保持“第一价值”
答案 1 :(得分:6)
枚举的值不能总是整数
最接近的是带有一组静态属性的静态类
static class MyValues
{
public static readonly string First = "First Value";
public static readonly string Second = "Second Value";
public static readonly string Third = "Third Value";
}
答案 2 :(得分:1)
你做不到。 enum
s基于整数,而不是字符串。
答案 3 :(得分:0)
枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。 所以像字符串一样,你唯一能做的就是
枚举MyEnum { 第一, 第二, 第三 }
MyEnum.first.ToString();
或者喜欢使用反射并使用描述作为枚举中字段的属性。
答案 4 :(得分:0)
enum MyEnum
{
FirstValue, //Default Value will be 0
SecondValue, // 1
ThirdValue // 2
}
string str1 = Enum.GetName(typeof(MyEnum), 0); //will return FirstValue
string str2 = Enum.GetName(typeof(MyEnum), MyEnum.SecondValue); //SecondValue
如果你需要一个像空格一样的完整字符串,你需要添加描述方法。 否则我建议只创建一个查找字典。
string value = MyLookupTable.GetValue(1); // First Value
value = MyLookupTable.GetValue(2); // Second Value
value = MyLookupTable.GetValue(3); // Third Value
class MyLookupTable
{
private static Dictionary<int, string> lookupValue = null;
private MyLookupTable() {}
public static string GetValue(int key)
{
if (lookupValue == null || lookupValue.Count == 0)
AddValues();
if (lookupValue.ContainsKey(key))
return lookupValue[key];
else
return string.Empty; // throw exception
}
private static void AddValues()
{
if (lookupValue == null)
{
lookupValue = new Dictionary<int, string>();
lookupValue.Add(1, "First Value");
lookupValue.Add(2, "Second Value");
lookupValue.Add(3, "Third Value");
}
}
}