Since an enum can be cast to and from its underlying integral type, the value may fall outside the range of values given in the definition of the enum type.
Although the below enum type DaysOfWeek
only has 7 defined values, it can still hold any int
value.
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
There is currently no way to define an enum which does not have this behavior.
However, undefined enum values can be detected by using the method Enum.IsDefined
. For example,
DaysOfWeek d = (DaysOfWeek)31;
Console.WriteLine(Enum.IsDefined(typeof(DaysOfWeek),d)); // prints False