.NET枚举类型的大小是多少?

4

.NET中的枚举可以有多少个条目?

6个回答

12

我相当确定枚举的基础类型是一个整数 类型(不一定是 int)。这个页面 这里 显示:

 

枚举的批准类型包括 byte、sbyte、short、ushort、int、uint、long 或 ulong。底层类型指定了为每个枚举值分配多少存储空间。

并且:

 

就像任何常量一样,对枚举中单独值的所有引用都在编译时转换为数字字面量。

所以我建议唯一的限制将是 long/ulong 的范围(超过十亿),以及编译器中枚举的可允许符号空间(如果您实际上创建的是真正巨大的枚举,则很可能会首先遇到该限制)。

如果您为枚举指定较小的类型(例如 short),则相应地减少范围。


10
如果他正在使用[flag]枚举,那么这可能是一个合法的问题。 - tster

6

18,446,744,073,709,551,616(无符号64位整数的最大值)。

枚举可以基于以下类型:

  • Byte(字节)
  • SByte(有符号字节)
  • Int32(整数型)
  • UInt32(无符号整数型)
  • Int16(短整型)
  • UInt16(无符号短整型)
  • Int64(长整型)
  • UInt64(无符号长整型)

5
我简直不敢相信我要写这个,但是……应该加一,即18,446,744,073,709,551,616(从0到18,446,744,073,709,551,615都包括在内)。 - Michael Petrotta
你知道的,我也不敢相信你写了那个(我怀疑是剪切粘贴),但因为太过于严谨,所以还是给你点赞 +1。 - paxdiablo
2
谁会把 Int64.MaxValue 记在脑子里? - Rex M
我觉得奇怪的是这个值是奇数。从那里开始,谷歌和MSDN的魔力就发挥了作用。但是Rex,如果有人认为我能记住Int64.MaxValue,我会感到非常荣幸。 - Michael Petrotta
1
我保留了每个小于262144的2的幂,但是在此之上,我需要一个计算器(或者更常见的做法是使用1<<power)。 - paxdiablo
我很高兴知道2的16次方,但是我需要一些空闲内存来存储圆周率;-) - si618

3

这取决于枚举的基础类型(见下文)。最大条目数将是字节、长整型等的最大数量。

enum Stuff : byte
{
...
}

将具有不同的最大条目数

enum Stuff : long
{
...
}

3
请注意,如果需要使用位运算,不同的非组合值的数量取决于所使用的整数类型中的位数。
例如,32位整数有32个可能的值,而64位整数有64个可能的值。关于这方面的更多信息可以在这里找到:flagsattribute - negative values?

2

您可以基于任何整数类型定义枚举(因此,对于该整数大小可用的条目数量,您可以有尽可能多的条目)。


2

由于它们不需要唯一...你可以尽可能多地使用它们,直到编译器崩溃...但听起来你已经滥用了它们...

相关信息:

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

(在实际使用中,这不应该是一个问题!!!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接