如何从值中获取C#Enum描述?
可能重复:
获取Enum值的属性
我有一个像这样的描述属性的枚举:
public enum MyEnum
{
Name1 = 1,
[Description("Here is another")]
HereIsAnother = 2,
[Description("Last one")]
LastOne = 3
}
我发现这一点代码来检索基于枚举的描述
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();
}
这使我可以编写如下代码:
var myEnumDescriptions = from MyEnum n in Enum.GetValues(typeof(MyEnum))
select new { ID = (int)n, Name = Enumerations.GetEnumDescription(n) };
我想要做的是如果我知道枚举值(例如1) - 如何检索描述? 换句话说,我如何将一个整数转换为一个“枚举值”传递给我的GetDescription方法?
int value = 1;
string description = Enumerations.GetEnumDescription((MyEnum)value);
C#中enum
的默认底层数据类型是int
,您可以将其转换为int
。
我在Unconstrained Melody中以一种通用的,类型安全的方式实现了这一点 - 您可以使用:
string description = Enums.GetDescription((MyEnum)value);
这个:
我意识到核心答案只是从int
到MyEnum
,但是如果你正在做很多枚举工作,那么值得考虑使用Unconstrained Melody :)
我把这些代码放在一个通用的扩展方法中,这样它就可以用于各种对象:
public static string DescriptionAttr<T>(this T source)
{
FieldInfo fi = source.GetType().GetField(source.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0) return attributes[0].Description;
else return source.ToString();
}
使用原始文章中的枚举或其属性使用Description属性装饰的任何其他类,可以按如下方式使用代码:
string enumDesc = MyEnum.HereIsAnother.DescriptionAttr();
string classDesc = myInstance.SomeProperty.DescriptionAttr();
链接地址: http://www.djcxy.com/p/16275.html