列舉可能有意想不到的值
由於列舉可以與其基礎整數型別進行強制轉換,因此該值可能超出列舉型別定義中給出的值範圍。
雖然下面的列舉型別 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