2013-03-19 30 views
3

在通過一些舊的代碼看,我遇到了這個枚舉:爲什麼這個多餘的逗號編譯?

public enum cmdResults 
    { 
     cmdNotFound = 0,  
     cmdFound = 1,  
     cmdExit  = 2,  
     cmdSuccess = 3,  
     cmdFail  = 4,  
     cmdTimeout = 5,  
     cmdProcess = 6, 
     cmdAddTime = 7, 
    }; 

在注意到最後枚舉成員之後的逗號,我被驚呆了;我刪除了它,並且正如預期的那樣,它仍然被編譯。但爲什麼它的工作最後的逗號?

(而這還不提陌生到我訂貨的成員,我要麼把新的「cmdNothing」在索引0,或者至少有「cmdFail」採取點)

+0

排序可以通過枚舉值隨時間增長來解釋。新的值不能取代現有的值,否則任何調用此方法的代碼 - 枚舉公開 - 都會中斷。 – ChrisF 2013-03-19 20:55:56

回答

11

因爲C#編譯器編寫者選擇在最後製作一個可選的逗號作爲有效語法。

我非常喜歡這個,因爲這意味着你不需要特殊情況下的最後一行。您可以複製粘貼行,在任何位置(包括結尾)添加新行,而不必考慮它的位置,刪除行而不需要修復逗號等。通過允許多餘的逗號引入沒有歧義或其他問題。

+0

而且,我很高興,它確實允許......在快速更改/構建/測試周期期間添加/刪除枚舉值,所以更好! – JerKimball 2013-03-19 20:58:35

+0

請注意,相同的語法適用於數組和對象初始值設定項。我也非常喜歡這一點,尤其是因爲它不會讓版本控制差異與不必要的行更改混淆。 – 2013-03-19 21:03:25

+0

對我來說,它看起來比一包菸頭醜9倍。 – 2013-03-19 21:21:24

3

它編譯,因爲這是合法的語法。