列舉可能有意想不到的值

由於列舉可以與其基礎整數型別進行強制轉換,因此該值可能超出列舉型別定義中給出的值範圍。

雖然下面的列舉型別 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