非唯一枚舉值
問題:
為什麼C 允許多個枚舉#數值被指派相同的基礎整數值?為此目的使用枚舉是否安全,還是應該使用結構體?
答案:
與普遍看法相反,C# 中的枚舉並不是特殊的類型,而是派生自 System.Enum 的結構。當您宣告枚舉時,編譯器會產生一個結構體,其中包含枚舉值的命名常數。
您的枚舉定義:
public enum Color { Red = 1, Blue = 1, Green = 1 }
翻譯為:
public struct Color : System.Enum { public const int Red = 1; public const int Blue = 1; public const int Green = 1; }
由於結構可以有多個具有相同值的常數,因此可以定義具有非唯一值的枚舉。但是,這可能會導致轉換為枚舉時出現不一致:
Color color1 = (Color)1; // Returns Red Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red
比較 Color.Red == Color.Green 也會評估為 true,這可能會令人困惑。
雖然它使用具有非唯一值的枚舉是合法的,建議僅在有意義時才使用它們。如果您需要唯一值,請考慮使用結構體或字典
以上是為什麼 C# 枚舉可以具有非唯一整數值,何時應避免這種情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!