超过 2^32 的枚举标志

2024-01-29

我在我的应用程序中使用枚举标志。枚举可以有大约 50 多个值,因此值最多为 2^50。我只是想知道我可以使用Math.Pow(2, variable)来计算这些?

当我尝试这样做时,我得到了恒定值编译时错误。除了手动计算 2 的幂并将其代入之外,还有其他方法吗?

这就是我正在做的事情:

[Flags]
internal enum RiskStates : long
    {
        None = 0,
        AL = Convert.ToInt64(Math.Pow(2,0)),
        AK = 2,
        AZ = 4,
        AR = 8,
        CA = 16,
        CO = 32,
        CT = 64,
        DC = 128,
        DE = 256,
        FL = 512,
        GA = 1024,
        HI = 2048,
        ID = 4096,
        IL = 8192,
        IN = 16384,
        IA = 32768,
        KS = 65536,
        KY = 131072,
        LA = 262144,
        ME = 524288,
        MD = 1048576,
        MA = 2097152,
        MI = 4194304
}

当我尝试这样做时,我得到了恒定值编译时错误。

如果你使用的话,你实际上会没事的L后缀强制其成为long文字 - 但手动指定它们仍然不理想。 (阅读代码时这并不“明显正确”。)

你不能使用Math.Pow因为表达式必须是编译时常量 - 但您可以使用位移位:

None = 0,
AL = 1L << 0,
AK = 1L << 1,
AZ = 1L << 2

等等。无论如何,我认为这更具可读性:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超过 2^32 的枚举标志 的相关文章

随机推荐