我知道enum可以使用以下语法,并且可以通过在int或char中解析它来获取值.
public enum Animal { Tiger=1, Lion=2 }
public enum Animal { Tiger='T', Lion='L' }
Run Code Online (Sandbox Code Playgroud)
虽然以下语法也是对的
public enum Anumal { Tiger="TIG", Lion="LIO"}
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何获得价值?如果我使用它转换它ToString(),我得到的KEY不是VALUE.
您不能在枚举中使用字符串.使用一个或多个词典istead:
Dictionary<Animal, String> Deers = new Dictionary<Animal, String>
{
{ Animal.Tiger, "TIG" },
{ ... }
};
Run Code Online (Sandbox Code Playgroud)
现在您可以使用以下命令获取字符串:
Console.WriteLine(Deers[Animal.Tiger]);
Run Code Online (Sandbox Code Playgroud)
如果您的鹿数在线(无间隙并从零开始:0,1,2,3 ......),您还可以使用数组:
String[] Deers = new String[] { "TIG", "LIO" };
Run Code Online (Sandbox Code Playgroud)
并以这种方式使用它:
Console.WriteLine(Deers[(int)Animal.Tiger]);
Run Code Online (Sandbox Code Playgroud)
如果您不希望每次都在每次上面编写代码,您也可以使用扩展方法:
public static String AsString(this Animal value) => Deers.TryGetValue(value, out Animal result) ? result : null;
Run Code Online (Sandbox Code Playgroud)
或者如果你使用一个简单的数组
public static String AsString(this Animal value)
{
Int32 index = (Int32)value;
return (index > -1 && index < Deers.Length) ? Deers[index] : null;
}
Run Code Online (Sandbox Code Playgroud)
并以这种方式使用它:
Animal myAnimal = Animal.Tiger;
Console.WriteLine(myAnimal.AsString());
Run Code Online (Sandbox Code Playgroud)
它也可以通过使用反射来完成这些洞,但这取决于你的表现应该如何(参见aiapatag的答案).
如果您确实坚持要使用enum来做到这一点,则可以通过具有Description属性并通过来获取它们Reflection。
public enum Animal
{
[Description("TIG")]
Tiger,
[Description("LIO")]
Lion
}
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();
}
Run Code Online (Sandbox Code Playgroud)
然后通过 string description = GetEnumDescription(Animal.Tiger);
或使用扩展方法:
public static class EnumExtensions
{
public static string GetEnumDescription(this 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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后用 string description = Animal.Lion.GetEnumDescription();
| 归档时间: |
|
| 查看次数: |
9996 次 |
| 最近记录: |