2011-02-11 224 views
179

枚舉變量,任何人都知道它總是默認爲第一個元素?枚舉變量的默認值是什麼

+1

需要默認枚舉的用例的一個注意事項是使用可爲空的變量。當收到null時,它可以在代碼的正確部分轉換爲默認值,並且在代碼的其餘部分(只傳遞null)中不需要知道該默認值。 – ErikE 2016-03-18 00:25:49

回答

287

它是枚舉的任何成員表示值0。具體而言,從documentation

一個enum E的默認值是由表達式(E)0產生的值。

作爲一個例子,可採取下列枚舉:

enum E 
{ 
    Foo, Bar, Baz, Quux 
} 

在不覆蓋缺省值,打印default(E)返回Foo,因爲它是第一個存在的元素。

然而,並不總是該枚舉的0由第一構件表示的情況下。例如,如果你這樣做:

enum F 
{ 
    // Give each element a custom value 
    Foo = 1, Bar = 2, Baz = 3, Quux = 0 
} 

印刷default(F)會給你Quux,不Foo

如果沒有在枚舉G的元素對應於0

enum G 
{ 
    Foo = 1, Bar = 2, Baz = 3, Quux = 4 
} 

default(G)返回字面上0,儘管其類型保持爲G(引通過上述文檔,流延到給定的枚舉類型)。

+1

謝謝,以及用char而不是int定義的枚舉呢? 例如枚舉狀態{Active ='A',Inactive ='I'} – 2015-04-24 16:17:20

7

我認爲依賴enum中值的順序是相當危險的,並且假設第一個總是默認值。如果您關心保護默認值,這將是一個很好的做法。

enum E 
{ 
    Foo = 0, Bar, Baz, Quux 
} 

否則,所需要的只是對命令的粗心重構,並且您有一個完全不同的默認值。