枚举是否限制了C#中的成员?

Gus*_*bio 10 .net c#

我想知道枚举结构类型是否对其成员有限制.我有一个非常大的"变量"列表,我需要存储在枚举中或作为类中的常量但我最终决定将它们存储在类中,但是,我对成员的限制有点好奇枚举(如果有的话).

那么,枚举对.Net有限制吗?

Pav*_*aev 18

是.具有不同值的成员数量受基础类型的限制enum- 默认情况下这是Int32,因此您可以获得许多不同的成员(2 ^ 32 - 我发现您很难达到该限制),但您可以明确指定这样的基础类型:

enum Foo : byte { /* can have at most 256 members with distinct values */ }
Run Code Online (Sandbox Code Playgroud)

当然,如果它们都具有相同的值,您可以拥有任意数量的成员:

enum { A, B = A, C = A, ... }
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,C#编译器中可能都有一些实现定义的限制,但我希望它是MIN(Int32范围,自由内存),而不是硬限制.


Sam*_*ell 7

由于PE文件格式的限制,您可能不会超过约100,000,000个值.也许更多,也许更少,但绝对不是问题.


Tam*_*ege 6

C#语言规范 3.0,1.10开始:

枚举类型的存储格式和可能值的范围由其基础类型确定.

虽然我不是100%肯定我会期望Microsoft C#编译器只允许非负的枚举值,所以如果底层类型是Int32(默认情况下是这样)那么我期望大约2 ^ 31个可能的值,但是这个是一个实现细节,因为它没有指定.如果你需要更多,你可能做错了.