我一直在寻找一种从枚举中获取替代值的方法,并引用了这个答案
这里它使用description属性来赋值,然后使用一个方法来提取它
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(); }
只有我不幸地陷入了.net 3.5 Compact Framework的黑暗时代,并且似乎无法访问System.ComponentModel.DescriptionAttribute
可能有人给我一个提示如何让这样的工作......
答案 0 :(得分:1)
我不确定这是你在想什么。我刚刚对原始代码进行了一些更改:
static class MyClass
{
public static string DescriptionAttr<T>(this T source, Type attrType, string propertyName)
{
FieldInfo fi = source.GetType().GetField(source.ToString());
var attributes = fi.GetCustomAttributes(attrType, false);
if (attributes != null && attributes.Length > 0)
{
var propertyInfo = attributes[0].GetType().GetProperty(propertyName);
if (propertyInfo != null)
{
var value = propertyInfo.GetValue(attributes[0], null);
return value as string;
}
}
else
return source.ToString();
return null;
}
}
public enum MyEnum
{
Name1 = 1,
[MyAttribute("Here is another")]
HereIsAnother = 2,
[MyAttribute("Last one")]
LastOne = 3
}
class MyAttribute : Attribute
{
public string Description { get; set; }
public MyAttribute(string desc)
{
Description = desc;
}
}
<强>用法:强>
var x = MyEnum.HereIsAnother.DescriptionAttr(typeof(MyAttribute), "Description");