Enum flags over 2^32

前端 未结 3 1952
無奈伤痛
無奈伤痛 2021-02-02 05:06

I am using Enum flags in my application. The Enum can have around 50+ values, so values go up to 2^50. I was just wondering, can I use Math.Pow(2, variable) to calc

相关标签:
3条回答
  • 2021-02-02 05:44

    When I try to do that I get a constant value compile-time error.

    You'd actually be okay if you used the L suffix to force it to be a long literal - but it's still not ideal to have to specify them all manually. (It's not "obviously correct" when reading the code.)

    You can't use Math.Pow as the expression has to be a compile-time constant - but you can use bit-shifting:

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

    etc. I'd argue that's more readable anyway :)

    0 讨论(0)
  • 2021-02-02 05:48

    I'd be tempted to consider using BitArray as the underlying structure.

    0 讨论(0)
  • 2021-02-02 05:57

    If you change to using non-decimal notations where the powers of 2 are more regular then you will no longer need to generate them automatically, e.g.:

    // octal
    AL = 0001L,
    AK = 0002L,
    AZ = 0004L,
    AR = 0010L,
    CA = 0020L,
    CO = 0040L,
    CT = 0100L,
    ...
    
    // hexadecimal
    AL = 0x001L,
    AK = 0x002L,
    AZ = 0x004L,
    AR = 0x008L,
    CA = 0x010L,
    CO = 0x020L,
    CT = 0x040L,
    ...
    
    0 讨论(0)
提交回复
热议问题