首頁 > 後端開發 > C++ > 為什麼 C# 枚舉可以具有非唯一整數值,何時應避免這種情況?

為什麼 C# 枚舉可以具有非唯一整數值,何時應避免這種情況?

Barbara Streisand
發布: 2024-12-30 01:19:11
原創
542 人瀏覽過

Why Can C# Enums Have Non-Unique Integer Values, and When Should I Avoid This?

非唯一枚舉值

問題:

為什麼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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板