Dies lässt sich wahrscheinlich am besten anhand eines Beispiels veranschaulichen. Ich habe ein Enum mit 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,
}
Ich möchte von einer Instanz aus auf diese Attribute zugreifen:
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
}
Da dies mit Reflexion erwarte ich einige Langsamkeit, aber es scheint chaotisch, um den Enum-Wert in eine Zeichenfolge (die den Namen widerspiegelt) zu konvertieren, wenn ich bereits eine Instanz von ihm haben.
Hat jemand eine bessere Idee?
0 Stimmen
Haben Sie verglichen mit
Enum.GetName()
?