簡體   English   中英

枚舉在c#中的行為

[英]Behaviour of enum in c#

 class MainClass
{
    static void Main(String[] args)
    {
        Fruits f =Fruits.Banana;
        Console.WriteLine("Fruit={0}",f);
        Console.Read();
    }

    private enum Fruits
    {
        Banana=0,
        Apple=0,
        Orange=0,
        Cherries
    }

}

上面的代碼給出了輸出: Fruit=Apple

如果我在枚舉中將Banana的值更改為0以外的任何值,則輸出為Banana。 我的問題是為什么在第一種情況下,輸出是Apple而不是OrangeBanana本身?

為什么你甚至做那樣的事情? 無論如何,這是因為在內部,具有相同值的enum按字母順序選擇。

在內部,枚舉非常類似於具有單個內部字段的struct - 具有與枚舉(此處為int )的基本類型相同的類型,其存儲該值。

這就是它,就枚舉而言。 它沒有任何其他存儲空間 - 它不知道它是如何構造的 - 無論是通過使用枚舉中的命名值,還是通過從基類型轉換,或任何其他方式。

因此,當您要求字符串表示時,它沒有進一步的信息比獲取數值並嘗試在其枚舉成員中找到與該值匹配的名稱。

如果多個成員具有相同的數值,我不確定是否 定義了將選擇哪個值,但它必須選擇 一些東西 ,並且它至少看起來是 一致的


事實上, Enum.ToString()說:

如果多個枚舉成員具有相同的基礎值,並且您嘗試根據其基礎值檢索枚舉成員名稱的字符串表示形式,則您的代碼不應對該方法將返回的名稱做出任何假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM