2013-04-15 91 views
1

今天我在C#編譯器中遇到了一些稍微奇怪的行爲,那就是擺弄枚舉。爲什麼枚舉以這種方式表現?

enum FunWithEnum 
{ 
    One = 1, 
    Two, 
    Three, 
    Four = 1, 
    Five = 2, 
    Six 
} 

結果:

  • FunWithEnum.One =一個
  • FunWithEnum.Two =兩個
  • FunWithEnum.Three =三個
  • FunWithEnum.Four =一個
  • FunWithEnum.Five =兩個
  • FunWithEnum.Six =三個

有人可以向我解釋爲什麼值是他們一旦編譯?

我最初的猜想與使用枚舉時能夠具有別名有關。但我不知道這是否合理。

+4

你經歷過的有點古怪的行爲是什麼? – mbeckish

+0

可能的重複[爲什麼(以及如何)的枚舉的順序影響ToString值?](http://stackoverflow.com/questions/4592536/why-and-how-does-the-order-of-an -enum-influence-the-tostring-value) – mbeckish

+0

是的,我在問爲什麼這些值分配的方式。 – CodeMonkey

回答

4

按照docs

the value of each successive enumerator is increased by 1.

在此基礎上

One = 1, 
Two, // = 2 
Three, // = 3 
Four = 1, 
Five = 2, 
Six //== 3 

而且還從the answer to the other question

這是不確定的,當多個枚舉具有相同的價值將返回的內容的ToString

+0

謝謝 - 我沒有注意到在文檔中! – CodeMonkey

2

我在提供的代碼中看到的值是從不由編譯器分配,它是由編碼器編寫的。 所以

  • 或者是導致混亂的錯誤(存在有與相同相關的數字不同枚舉成員沒有太大SENCE)
  • ,或者是與一些老/遺留交易代碼系統,其中開發者必須引入一些新的價值(針對開發商品或者其他1000個原因),但是與系統本身保持兼容。所以這是一種workarround來擴展一些無法觸及的非常舊的代碼的功能。
相關問題