2011-11-24 41 views
4

我做了下面的測試代碼:枚舉與價值沒有場「0」

public enum Test 
{ 
    One = 1, 
    Two = 2 
} 
public class User 
{ 
    public Test Flag { get; set; } 
} 

,我用這樣的:

​​

值將null,因爲它看起來像User.Flag0初始化。這是爲什麼? 0對於我的枚舉不是有效的值。不應該使用第一個有效值(1)進行初始化嗎?

+0

看到這個答案:http://stackoverflow.com/q/1165414/25727 – Jan

+0

[Enum初始值問題(C#)]的可能重複(http://stackoverflow.com/questions/1165402/question-on-initial-value-of-an-enum-c ) – jgauffin

+0

@Jan:謝謝。沒有看到那個。將我自己的問題作爲一個副本 – jgauffin

回答

2

枚舉由整數類型支持並表現得像他們(主要)。

不幸的是,這意味着您可以將的任何值在底層類型上有效賦值給枚舉 - 沒有檢查。

在默認初始化的情況下,這將是基礎類型的默認值,對於整數類型是0

你可以做到這一點爲好,它會編譯並運行:

var value = (Test)43; 

或許重新定義枚舉,如下所示:

Enum類有一些方便的方法來工作使用枚舉 - 例如IsDefined來查找變量是否包含枚舉的定義值。

2

它初始化爲基礎類型的默認值,即intdefault(int)0

1

基礎類型枚舉的是int類型默認和默認值明顯是0(可以指定自定義基本類型,但只有原始數字像enum CustomEnum : byte

1.10枚舉,C#規格:

每個枚舉類型都有一個相應的整型,稱爲枚舉類型的底層 類型。不明確聲明 基礎類型的枚舉類型具有基礎類型int。枚舉類型的 存儲格式和可能值範圍由其基本類型 確定。枚舉類型可以採用的值集合是 ,不受其枚舉成員的限制。具體而言,枚舉的基礎類型的任何值都可以轉換爲枚舉類型,並且該枚舉類型的有效值是不同的。

-1

GetField採取屬性名的名稱和要傳遞的user.Flag

枚舉值你應該寫

var value = (Test) typeof(Test).GetField("Flag").GetValue(user); 
+0

嘗試編碼... – jgauffin

+0

感謝您指出。我誤解了這個問題。 –

+0

其他三個答案應該給你一個提示;) – jgauffin