Я использую флаги Enum в своем приложении. Enum может иметь около 50+ значений, поэтому значения достигают 2^50. Мне просто интересно, могу ли я использовать Math.Pow(2, variable)
для их расчета?Enum flags over 2^32
Когда я пытаюсь сделать это, я получаю постоянное значение ошибка времени компиляции. Есть ли другой способ, кроме вычисления этих полномочий 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
}
Я бы использовал регулярное перечисление с помощью HashSet. – billpg
Из любопытства, почему значения должны повышаться в силе 2? – deed02392
@ deed02392: из-за флага характер этого перечисления. Вы можете комбинировать несколько значений. Каждое значение «имеет» один бит в значении. 'AZ + AK' будет 6. Используя полномочия 2, избегайте нежелательного столкновения комбинаций. –