Ceci est probablement mieux montré avec un exemple. J'ai un ENUM avec des attributs:Quelqu'un connaît un moyen rapide d'accéder aux attributs personnalisés sur une valeur enum?
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,
}
Je veux arriver à ces attributs d'une instance:
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
}
Comme cela utilise la réflexion, je pense une certaine lenteur, mais il semble désordonné de convertir le ENUM valeur à une chaîne (qui reflète le nom) quand j'en ai déjà une instance.
Est-ce que quelqu'un a un meilleur moyen?
Avez-vous comparé avec 'Enum.GetName()'? –