在閱讀某人的源代碼時,我遇到了一個C#代碼片段,其行爲令我感到困惑。我開始問之前,這裏是一個適合例子:Enum.GetValues()的內部工作()
枚舉:
private enum Seasons
{
Spring,
Summer,
Autumn,
Winter
}
用法:
foreach(Seasons value in Enum.GetValues(typeof(Seasons)))
{
Console.WriteLine(String.Format("{0} {1}", value, (int) value));
}
輸出看起來是這樣的:
Spring 0
Summer 1
Autumn 2
Winter 3
我的問題:
這是如何在C#中工作的?返回值來自:
Enum.GetValues(typeof(Seasons))
是一個int數組,其值爲0-3。 當它被鑄造成季節 - 枚舉時,我首先期望它失敗。
我想,因爲一個枚舉是引用類型,上的String.Format() - 變量「值」,則ToString()方法將被調用,這將返回它的名字。但是,當轉換爲int時,它將使用該「已命名」值的Property並返回int值。
如果有人能告訴我這是如何在窗簾後面工作的,我很高興。我瀏覽了文件,但無法解決。
謝謝...
謝謝大家對你的答案!
但是,如果可以請多說一點關於C#內部的東西,我會非常感激。在Java中,枚舉將是一個真正的引用類型,在內存中,它將被視爲指向存儲整數的另一個內存平衡的引用。非常非常簡單。
--------- -----------------
| | Reference |int Spring |
|Seasons|-------------> |int Summer |
| | |int Autumn |
--------- |int Winter |
-----------------
在我看來,在C#中編譯器,將它轉移到像公共常量(在我的情況下是一個int)。請不要扔石頭...
System.Enum是一個引用類型,但是從它繼承的類型是值類型。 – FSou1