Wer weiß einen schnellen Weg, um die benutzerdefinierten Attribute, die auf einem enum-Wert?

Dies ist wahrscheinlich am besten mit einem Beispiel. Ich habe ein enum mit den Attributen:

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,
}

Möchte ich diese Attribute von einer Instanz:

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
}

Wie das ist mit der spiegelung ich erwarten, dass einige Langsamkeit, aber es scheint chaotisch zu konvertieren, die enum-Wert in einen string (entsprechend dem Namen), wenn ich bereits eine Instanz von Ihr.

Hat jemand eine bessere Möglichkeit?

  • Haben Sie im Vergleich mit Enum.GetName()?
InformationsquelleAutor Keith | 2008-08-20
Schreibe einen Kommentar