2009-10-14 74 views

回答

12

我很確定底層類型是整數類型(不一定是int)。此頁面here指出:

枚舉的批准類型是byte,sbyte,short,ushort,int,uint,long或ulong。基礎類型指定爲每個枚舉器分配多少存儲空間。

和:

正如任何恆定的,到一個枚舉的各個值的所有引用在編譯時轉換爲數字文字。

所以我建議,唯一的限制將是long/ulong(以及數十億)的範圍,並在編譯器枚舉(你很可能會打擊這一限制第一,如果你實際上是在允許的符號空間創造真正巨大的枚舉)。

如果您爲枚舉指定較小的類型(例如short),則範圍將相應減少。

+10

這可能是一個有效的問題,如果他使用[國旗]枚舉。 – tster 2009-10-14 02:53:33

6

18,446,744,073,709,551,616(無符號的64位整數的最大值)。

枚舉可以基於:

  • 字節
  • 爲SByte
  • 的Int32
  • UInt32的
  • 的Int16
  • UINT16
  • 的Int64
  • UINT64
+5

我不能相信我在寫這一點,但...它應該大一,18,446,744,073,709,551,616(0至18,446,744,073,709,551,615,含)。 – 2009-10-14 03:06:44

+0

你知道嗎,我不能相信你寫的是(我懷疑cut'n'paste),但+1是肛門^^^ ^^ – paxdiablo 2009-10-14 03:16:43

+2

誰把Int64.MaxValue放在頭上? – 2009-10-14 03:21:44

2

您可以基於任何整數類型定義枚舉(因此具有與該整數大小相同的條目數)。

3

它取決於枚舉的基本類型(請參見下文)。那麼最大的條目數是字節,長的最大數量等

enum Stuff : byte 
{ 
... 
} 

將有不同數量最多的條目比

enum Stuff : long 
{ 
... 
} 
3

記住,如果按位操作需要,不同的非組合值的數量取決於所用整數類型的位數。

例如,一個32位的整數有32個可能的值,而一個64位的整數有64個可能的值。這裏有更多關於這方面的內容:flagsattribute - negative values?

2

因爲它們不需要是獨一無二的...儘可能多地擺脫它,直到你打破編譯器......但聽起來你已經在濫用它們了。 ..

對於信息:

enum Foo 
{ 
    A = 1, 
    B = 1, 
    C = 1 
} 

(這不應該是在現實世界中使用的一個問題!)