向枚举标志添加两个附加值

时间:2020-07-14 12:36:59

标签: c#

我可以在此处添加的数字值是否有限制?

public enum AssignmentType
{
    None = 0,
    Attendant = 1,
    ConductorCBS = 2,
    ReaderCBS = 4,
    Chairman = 8,
    Mike = 16,
    PlatformAttendant = 32,
    Prayer = 64,
    OCLM = 128,
    Sound = 256,
    Student = 512,
    Custom = 1024,
    Demonstration = 2048,
    Assistant = 4096
}

我想再输入两个值,我认为应该是两倍:

  • 8192
  • 16384

可以用这两个附加值来增加我的枚举吗?

2 个答案:

答案 0 :(得分:1)

C#,当然,所有.NET枚举默认都基于int

因此,您可以存储-2 147 483 648到2 147 483 647的值。

下方或上方,您需要指定其他类型,例如:

public enum AssignmentType : long or ulong

使用ulong时,最多可以达到18446744073073709551615!

有时有人认为使用小型类型会优化,但实际上,由于CPU体系结构,如果在x32系统上少于32位或在x64系统上少于64位,则情况并非如此。仅当需要使用嵌入式系统和/或在包含多个数据的缓冲区中使用枚举值(例如在二进制结构/缓冲区中)时,才使用字节或短路等方法进行操作。

如果我还记得,第一个.NET Framework AnyCPU具有int x32或x64,具体取决于平台,但是下一个版本将int设置为所有系统的4字节,这让我感到困惑。但这是可理解的,因为它具有可移植性问题而不是可移植性优势。

Enumeration types (C# reference)

Integral numeric types (C# reference)

答案 1 :(得分:1)

是的,您可以没问题。

请查看enum的Microsoft官方文档,否则我建议您也查看this

如果您想知道为什么将这些值加倍,请查看with cte as ( select name, id from t where id = 1 union all select t.name, t.id from cte join t on t.parent_id = cte.id ) select name from cte; here。它使您有机会一次选择多个枚举值。