首頁 > 後端開發 > C++ > C# 中的枚舉可以保存具有相同基礎常數的多個值嗎?

C# 中的枚舉可以保存具有相同基礎常數的多個值嗎?

Susan Sarandon
發布: 2025-01-03 02:12:37
原創
152 人瀏覽過

Can Enums in C# Hold Multiple Values with the Same Underlying Constant, and What are the Implications?

枚舉聲明中的多個值:深入了解CLR

與結構不同,枚舉被歸類為表示集合的輕量級值類型命名常數。然而,問題提出的是一個有趣的觀察,即枚舉似乎允許將多個值分配給同一個常數。

深入研究公共語言運行時 (CLR) 的實作細節,很明顯地列舉本質上與結構類似。在幕後,枚舉派生自 System.Enum 基類,本質上是具有預定義常數值的結構。

考慮範例枚舉聲明:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
登入後複製

CLR 在內部解釋此聲明如下:

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}
登入後複製

雖然C# 禁止對結構進行明確基類聲明,但CLR 仍然產生此枚舉的表示。

枚舉型別中存在具有相同值的多個常數不會造成問題。但是,這種非唯一的賦值可能會導致在轉換為枚舉類型期間出現意外行為。

例如:

Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
登入後複製

color1 和 color2 都會設定為 Red 值,因為第一個賦值是任意的。從技術上講,顏色 1 和顏色 2 都沒有指定為紅色;相反,它們的值為 1。但是當顯示時,您將看到紅色。

此外,非唯一枚舉值之間的比較操作可能會產生令人驚訝的結果:

// true (Red is Green??)
bool b = Color.Red == Color.Green;
登入後複製

這個等式成立,因為紅色和綠色的基礎數值都是1。

雖然這種行為本質上沒有問題,但在使用時值得考慮具有非唯一值的枚舉。確定這種非唯一性是否符合枚舉設計的預期目的和語義至關重要。

以上是C# 中的枚舉可以保存具有相同基礎常數的多個值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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