2009-10-14 78 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 
} 

(这不应该是在现实世界中使用的一个问题!)