Это, вероятно, лучше всего показано на примере. У меня есть перечисление с атрибутами:
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
}
Поскольку это использование отражения, я ожидаю некоторую медлительность, но кажется бесполезным преобразовать значение перечисления в строку (которая отражает имя), когда у меня уже есть экземпляр.
Есть ли у кого лучший способ?