繁体   English   中英

C# 我们如何扩展枚举标志的 scope?

[英]C# How can we expand the scope of enum flags?

我正在使用 Enum Flags 来指示状态值。

但我发现这有一个 int 范围

所以会出现以下错误。

我想添加枚举状态值,我该怎么办?

在此处输入图像描述

[Flags]枚举中唯一值的最大数量为 65(64 + 0 值)。
您将需要一个 64 位 ulong 基础类型才能使其工作。

默认 Enum 基于 Int32,因此您只能拥有 33 个唯一的[Flags]值。

[Flags]
public enum eStatus : ulong
{
    Normal = 0,
    Status0001 = 1 << 0,
    Status0002 = 1 << 1,
    Status0003 = 1 << 2,
    Status0004 = 1 << 3,
    Status0005 = 1 << 4,
    // ...
    Status0030 = 1 << 29,
    Status0031 = 1 << 30,
    
    Status0032 = (ulong) 1 << 31,
    Status0033 = (ulong) 1 << 32,
    // ...
    Status0063 = (ulong) 1 << 62,
    Status0064 = (ulong) 1 << 63,
}

您的最后一个枚举值不能包含在 enum: int使用的默认 integer 表示中。

您可以检查: 0x80000000 > int.MaxValue返回true

因此,您必须将枚举存储在更大的 integer 表示中: long

像这样:

[Flags]
public enum eStatus : long
{
    Status001 = 0x000000001,
    Status002 = 0x000000002,
    Status003 = 0x000000004,
    Status004 = 0x000000008,
    Status005 = 0x000000010,
    [...]
    Status1111 = 0x40000000,
    Status1112 = 0x80000000,
}

Status1111是一个奇怪的名称,因为您不会为eStatus枚举定义超过 64 个不同的可能值,因为long以 2 为底只有 64 个数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM