枚举可能有意想不到的值

由于枚举可以与其基础整数类型进行强制转换,因此该值可能超出枚举类型定义中给出的值范围。

虽然下面的枚举类型 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