枚举可能有意想不到的值
由于枚举可以与其基础整数类型进行强制转换,因此该值可能超出枚举类型定义中给出的值范围。
虽然下面的枚举类型 DaysOfWeek
只有 7 个定义的值,但它仍然可以保存任何 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
目前无法定义没有此行为的枚举。
但是,可以使用方法 Enum.IsDefined
检测未定义的枚举值。例如,
DaysOfWeek d = (DaysOfWeek)31;
Console.WriteLine(Enum.IsDefined(typeof(DaysOfWeek),d)); // prints False