Vous pouvez ajouter des attributs aux éléments de l'énumération et ensuite utiliser la réflexion pour obtenir les valeurs des attributs.
Vous devez utiliser le "champ" spécificateur pour appliquer les attributs, comme suit:
enum GroupTypes
{
[field:Description("OEM")]
TheGroup,
[field:Description("CMB")]
TheOtherGroup
}
Il vous faudra alors réfléchir sur les champs statiques du type de l'enum (dans ce cas GroupTypes) et obtenir l' DescriptionAttribute
pour la valeur que vous recherchez à l'aide de la réflexion:
public static DescriptionAttribute GetEnumDescriptionAttribute<T>(
this T value) where T : struct
{
// The type of the enum, it will be reused.
Type type = typeof(T);
// If T is not an enum, get out.
if (!type.IsEnum)
throw new InvalidOperationException(
"The type parameter T must be an enum type.");
// If the value isn't defined throw an exception.
if (!Enum.IsDefined(type, value))
throw new InvalidEnumArgumentException(
"value", Convert.ToInt32(value), type);
// Get the static field for the value.
FieldInfo fi = type.GetField(value.ToString(),
BindingFlags.Static | BindingFlags.Public);
// Get the description attribute, if there is one.
return fi.GetCustomAttributes(typeof(DescriptionAttribute), true).
Cast<DescriptionAttribute>().SingleOrDefault();
}
J'ai opté pour le retour de l' DescriptionAttribute
- dessus, dans le cas où vous voulez être en mesure de déterminer si oui ou non l'attribut est encore appliquée.