Use bit-shifting with index to avoid hardcoding complex numbers.
The last flag is the Unsigned Bit, also known as the Most Significant Bit, or left-most bit.
Which is what enables a 32bit mask to represent any combination uniquely.
[System.Flags]
public enum MyEnum : byte
{
None = 0, // 00000000 (0 in decimal)
Flag1 = 1 << 0, // 00000001 (1 in decimal)
Flag2 = 1 << 1, // 00000010 (2 in decimal)
Flag3 = 1 << 2, // 00000100 (4 in decimal)
Flag4 = 1 << 3, // 00001000 (8 in decimal)
Flag5 = 1 << 4, // 00010000 (16 in decimal)
Flag6 = 1 << 5, // 00100000 (32 in decimal)
Flag7 = 1 << 6, // 01000000 (64 in decimal)
Flag8 = 1 << 7 // 10000000 (128 in decimal)
}
By default, enum inherits from int. But if Flag32 is to be valid, it needs to inherit from uint.
[System.Flags]
public enum DummyFlags : uint
{
None = 0,
Flag1 = 1 << 0,
Flag2 = 1 << 1,
Flag3 = 1 << 2,
Flag4 = 1 << 3,
Flag5 = 1 << 4,
Flag6 = 1 << 5,
Flag7 = 1 << 6,
Flag8 = 1 << 7,
Flag9 = 1 << 8,
Flag10 = 1 << 9,
Flag11 = 1 << 10,
Flag12 = 1 << 11,
Flag13 = 1 << 12,
Flag14 = 1 << 13,
Flag15 = 1 << 14,
Flag16 = 1 << 15,
Flag17 = 1 << 16,
Flag18 = 1 << 17,
Flag19 = 1 << 18,
Flag20 = 1 << 19,
Flag21 = 1 << 20,
Flag22 = 1 << 21,
Flag23 = 1 << 22,
Flag24 = 1 << 23,
Flag25 = 1 << 24,
Flag26 = 1 << 25,
Flag27 = 1 << 26,
Flag28 = 1 << 27,
Flag29 = 1 << 28,
Flag30 = 1 << 29,
Flag31 = 1 << 30,
Flag32 = 1U << 31
}
By inheriting from long or ulong, the number of flags and unique combinations can be increased.
[System.Flags]
public enum MyEnum : ulong
{
None = 0,
Flag1 = 1UL << 0,
Flag2 = 1UL << 1,
Flag3 = 1UL << 2,
Flag4 = 1UL << 3,
Flag5 = 1UL << 4,
Flag6 = 1UL << 5,
Flag7 = 1UL << 6,
Flag8 = 1UL << 7,
Flag9 = 1UL << 8,
Flag10 = 1UL << 9,
Flag11 = 1UL << 10,
Flag12 = 1UL << 11,
Flag13 = 1UL << 12,
Flag14 = 1UL << 13,
Flag15 = 1UL << 14,
Flag16 = 1UL << 15,
Flag17 = 1UL << 16,
Flag18 = 1UL << 17,
Flag19 = 1UL << 18,
Flag20 = 1UL << 19,
Flag21 = 1UL << 20,
Flag22 = 1UL << 21,
Flag23 = 1UL << 22,
Flag24 = 1UL << 23,
Flag25 = 1UL << 24,
Flag26 = 1UL << 25,
Flag27 = 1UL << 26,
Flag28 = 1UL << 27,
Flag29 = 1UL << 28,
Flag30 = 1UL << 29,
Flag31 = 1UL << 30,
Flag32 = 1UL << 31,
Flag33 = 1UL << 32,
Flag34 = 1UL << 33,
Flag35 = 1UL << 34,
Flag36 = 1UL << 35,
Flag37 = 1UL << 36,
Flag38 = 1UL << 37,
Flag39 = 1UL << 38,
Flag40 = 1UL << 39,
Flag41 = 1UL << 40,
Flag42 = 1UL << 41,
Flag43 = 1UL << 42,
Flag44 = 1UL << 43,
Flag45 = 1UL << 44,
Flag46 = 1UL << 45,
Flag47 = 1UL << 46,
Flag48 = 1UL << 47,
Flag49 = 1UL << 48,
Flag50 = 1UL << 49,
Flag51 = 1UL << 50,
Flag52 = 1UL << 51,
Flag53 = 1UL << 52,
Flag54 = 1UL << 53,
Flag55 = 1UL << 54,
Flag56 = 1UL << 55,
Flag57 = 1UL << 56,
Flag58 = 1UL << 57,
Flag59 = 1UL << 58,
Flag60 = 1UL << 59,
Flag61 = 1UL << 60,
Flag62 = 1UL << 61,
Flag63 = 1UL << 62,
Flag64 = 1UL << 63
}