[英]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.