隱含列舉轉換 是 C# 型別系統中極其特殊的一條規則:僅允許十進位整數常值 0 隱含轉換為任意列舉型別。其他任何整數值(包括變數 0)都不適用。
using System;
enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
class Test {
static void Main() {
Weekday day;
day = 0; // ✅ 合法:常值 0 隱含轉換
Console.WriteLine(day); // 輸出 0 (Sunday)
// day = 1; // ❌ 編譯錯誤 CS0131:int 無法隱含轉 Weekday
}
}
0 通常對應列舉的預設值(第一個成員),符合「預設初始化為零」的語意。Weekday day = 5; 這類魔術數字直接指派,強制使用 Weekday.Friday 提升可讀性與型別安全。day = (Weekday)3;。default(T) 與列舉Weekday d = default; // 等同 0,合法
var d2 = default(Weekday); // 同樣合法
這與隱含列舉轉換規則一致,default 產生的零值可隱含轉為列舉型別。