C# Language Enums peuvent avoir des valeurs inattendues


Exemple

Comme un enum peut être converti en et à partir de son type intégral sous-jacent, la valeur peut tomber en dehors de la plage de valeurs donnée dans la définition du type enum.

Bien que le type DaysOfWeek ci-dessous DaysOfWeek que 7 valeurs définies, il peut toujours contenir une valeur int .

public enum DaysOfWeek
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}

DaysOfWeek d = (DaysOfWeek)31;
Console.WriteLine(d); // prints 31

DaysOFWeek s = DaysOfWeek.Sunday;
s++; // No error

Il n'y a actuellement aucun moyen de définir une énumération qui n'a pas ce comportement.

Toutefois, les valeurs d'énumération non définies peuvent être détectées à l'aide de la méthode Enum.IsDefined . Par exemple,

DaysOfWeek d = (DaysOfWeek)31;
Console.WriteLine(Enum.IsDefined(typeof(DaysOfWeek),d)); // prints False