Can you access a long description for a specific enum value
我通常访问对应值的枚举描述,例如:
enum.getname(typeof(myenum),myid);
我需要一个枚举,它可以使用任何字符,如"hello world%^$impull%&;"
我见过有人附加了一个属性并添加了如下扩展:
http://weblogs.asp.net/stefansedich/archive/2008/03/12/enum-with-string-values-in-c.aspx
但我不知道这是否可以用来获取详细的描述。
有人做过类似的事吗?
谢谢
戴维
为什么不行?
可以通过从属性插入来创建自己的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class EnumInformation: Attribute { public string LongDescription { get; set; } public string ShortDescription { get; set; } } public static string GetLongDescription(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = type.GetField(value.ToString()); // Get the stringvalue attributes EnumInformation [] attribs = fieldInfo.GetCustomAttributes( typeof(EnumInformation ), false) as EnumInformation []; // Return the first if there was a match. return attribs != null && attribs.Length > 0 ? attribs[0].LongDescription : null; } public static string GetShortDescription(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = type.GetField(value.ToString()); // Get the stringvalue attributes EnumInformation [] attribs = fieldInfo.GetCustomAttributes( typeof(EnumInformation ), false) as EnumInformation []; // Return the first if there was a match. return attribs != null && attribs.Length > 0 ? attribs[0].ShortDescription : null; } |
您的枚举将如下所示
1 2 3 4 5 6 7 | public enum MyEnum { [EnumInformation(LongDescription="This is the Number 1", ShortDescription="1")] One, [EnumInformation(LongDescription ="This is the Number Two", ShortDescription ="2")] Two } |
你可以这样用
1 2 3 4 | MyEnum test1 = MyEnum.One; Console.WriteLine("test1.GetLongDescription = {0}", test1.GetLongDescription()); Console.WriteLine("test1.GetShortDescription = {0}", test1.GetShortDescription()); |
它输出
test1.GetLongDescription = This is the Number 1
test1.GetShortDescription = 1
实际上,您可以向属性添加属性以包含各种信息。然后,您可以支持您要查找的本地化。
"长描述"是什么意思?我有一个库,允许您将
1 2 3 4 5 6 7 | public enum Foo { [Description("This is a really nice piece of text")] FirstValue, [Description("Short but sweet")] Second, } |
如果您谈论的是XML文档,那是另一回事——它没有内置到二进制文件中,因此您还必须构建/传送XML,然后在执行时获取它。这是可行的,但我没有现成的代码…
如果您需要一种简单的方法来提取枚举值的描述属性,请查看我对类似问题的回答。
您只需对以下值调用
1 | string description = myEnumValue.GetDescription(); |
乔恩提到的不受约束的旋律库包括一个类似的扩展方法(除了许多其他很酷的东西),您应该检查一下。
我倾向于远离这种做法。如果您考虑一下,它将您的代码逻辑绑定到您如何键入代码上。最好使用switch语句、资源文件、数据库等。
我很难学会这一点。我有一个应用程序,我们最终决定模糊,以帮助保护我们的代码。正如您可以想象的那样,由于枚举在模糊期间被重命名,我们的二进制文件停止了我们想要的工作方式。