這可能是最好的例子。我有一個屬性的枚舉:任何人都知道快速獲取枚舉值的自定義屬性的方法嗎?
public enum MyEnum {
[CustomInfo("This is a custom attrib")]
None = 0,
[CustomInfo("This is another attrib")]
ValueA,
[CustomInfo("This has an extra flag", AllowSomething = true)]
ValueB,
}
我想從一個實例的屬性:
public CustomInfoAttribute GetInfo(MyEnum enumInput) {
Type typeOfEnum = enumInput.GetType(); //this will be typeof(MyEnum)
//here is the problem, GetField takes a string
// the .ToString() on enums is very slow
FieldInfo fi = typeOfEnum.GetField(enumInput.ToString());
//get the attribute from the field
return fi.GetCustomAttributes(typeof(CustomInfoAttribute ), false).
FirstOrDefault() //Linq method to get first or null
as CustomInfoAttribute; //use as operator to convert
}
由於這是使用反射我期待一些緩慢,但它似乎雜亂枚舉轉換當我已經擁有它的一個實例的時候,這個值就是一個字符串(它反映了名字)。
有沒有人有更好的方法?
你和Enum.GetName()比較了嗎? – 2008-08-20 12:41:06