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