반응형
2 ^ 32 이상의 열거 형 플래그
내 응용 프로그램에서 Enum 플래그를 사용하고 있습니다. Enum은 약 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
등. 어쨌든 더 읽기 쉽다고 주장합니다 :)
2의 거듭 제곱이 더 규칙적인 비 10 진수 표기법을 사용하도록 변경하면 더 이상 자동으로 생성 할 필요가 없습니다. 예 :
// 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,
...
BitArray를 기본 구조로 사용하는 것을 고려하고 싶습니다.
참고 URL : https://stackoverflow.com/questions/19021821/enum-flags-over-232
반응형
'UFO ET IT' 카테고리의 다른 글
SVG에 멋진 글꼴 아이콘을 어떻게 포함합니까? (0) | 2020.11.10 |
---|---|
차이점 (0) | 2020.11.10 |
Moment.js 날짜를 사용자 현지 시간대로 변환하는 방법은 무엇입니까? (0) | 2020.11.10 |
goal maven release : prepare를 실행하지 못했습니다. (0) | 2020.11.10 |
Django를 사용하여 SQLite 테이블에 수천 개의 레코드를 삽입하는 효율적인 방법은 무엇입니까? (0) | 2020.11.10 |