« Enum » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(→Flags) |
|||
Ligne 66 : | Ligne 66 : | ||
int i = default(MyEnum); | int i = default(MyEnum); | ||
// retourne toujours 0, même si 0 n'est pas une valeur valide | // retourne toujours 0, même si 0 n'est pas une valeur valide | ||
</kode> | |||
= Description = | |||
<kode lang='cs'> | |||
var name = Enum.GetName(typeof(MyEnum), 1); // Un | |||
var description = MyEnum.Un.GetDescription(); // Un ! | |||
var descriptionOrName = EnumExtension.GetDescriptionOrName(typeof(MyEnum), 1); // Un ! | |||
enum MyEnum | |||
{ | |||
[Description("Un !")] | |||
Un = 1, | |||
[Description("Deux !")] | |||
Deux = 2 | |||
} | |||
public static class EnumExtension | |||
{ | |||
// static method | |||
public static string GetDescriptionOrName(Type enumType, object value) | |||
{ | |||
var name = Enum.GetName(enumType, value); | |||
var fieldInfo = enumType.GetField(name); | |||
if (fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) is DescriptionAttribute[] attributes && attributes.Any()) | |||
{ | |||
return attributes.First().Description; | |||
} | |||
return name; | |||
} | |||
// extension method | |||
public static string GetDescription(this Enum source) | |||
{ | |||
var fieldInfo = source.GetType().GetField(source.ToString()); | |||
if (fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), | |||
false) is DescriptionAttribute[] attributes && attributes.Any()) | |||
{ | |||
return attributes.First().Description; | |||
} | |||
return source.ToString(); | |||
} | |||
} | |||
</kode> | </kode> |
Version du 8 juin 2021 à 16:51
Bases
enum MyEnum { Un, Deux } // Compter le nombre d’élément d’une énumération. int count = Enum.GetValues(typeof(MyEnum)).Length; // Nom du nième élément de l'énumération. Enum.GetName(typeof(MyEnum), 1); // → "Deux" // Liste des noms des éléments de l'énumération. Enum.GetNames(typeof(MyEnum)); // → "Un" | "Deux" // Liste des valeurs de l'énumération. Enum.GetValues(typeof(MyEnum)); // → MyEnum.Un | MyEnum.Deux |
Convertions
int / byte
byte unEntier = 1; MyEnum myEnum = (MyEnum)unEntier; // Deux byte unEntier = (byte)MyEnum.Deux; // 1 |
string
// Parser un string en enum. Génère un ArgumentException en cas d'échec. MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "un", true); // 3ème arg: IgnoreCase MyEnum myEnum; if (Enum.TryParse("un", true, out myEnum)) { } |
Flags
[Flags] public enum Font { Bold = 1, // 1 Italic = 1 << 1, // 2 Underlined = 1 << 2, // 4 All = Bold | Italic | Underlined } // gras et italique Font font = Font.Bold | Font.Italic; // ajout de souligné font |= Font.Underlined; // suppression de souligné font &= ~Font.Underlined; // test si font contient Underlined if (font.HasFlag(Font.Underlined)) { } if ((font & Font.Underlined) == Font.Underlined) { } Console.WriteLine(Font.Bold | Font.Italic | Font.Underlined); // All |
Default value
int i = default(MyEnum); // retourne toujours 0, même si 0 n'est pas une valeur valide |
Description
var name = Enum.GetName(typeof(MyEnum), 1); // Un var description = MyEnum.Un.GetDescription(); // Un ! var descriptionOrName = EnumExtension.GetDescriptionOrName(typeof(MyEnum), 1); // Un ! enum MyEnum { [Description("Un !")] Un = 1, [Description("Deux !")] Deux = 2 } public static class EnumExtension { // static method public static string GetDescriptionOrName(Type enumType, object value) { var name = Enum.GetName(enumType, value); var fieldInfo = enumType.GetField(name); if (fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) is DescriptionAttribute[] attributes && attributes.Any()) { return attributes.First().Description; } return name; } // extension method public static string GetDescription(this Enum source) { var fieldInfo = source.GetType().GetField(source.ToString()); if (fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) is DescriptionAttribute[] attributes && attributes.Any()) { return attributes.First().Description; } return source.ToString(); } } |