Enum flags over 2^32
Solution 1:
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 :)
Solution 2:
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,
...