열거 형은 0 또는 1로 시작해야합니까?
다음 Enum을 정의했다고 상상해보십시오.
public enum Status : byte
{
Inactive = 1,
Active = 2,
}
열거 형을 사용하는 가장 좋은 방법은 무엇입니까? 1
위의 예제 와 같이 시작 하거나 다음 과 같이 0
명시 적 값없이 시작 해야합니다 .
public enum Status : byte
{
Inactive,
Active
}
마 없음 다음 열거에 대한 기본 값으로 사용되어야하는 요소에 제로 값을 할당, 열거에 적합하지 않은 경우이 아닌 플래그 열거에 0의 값을 제공합니다.
음수 또는 0 인 플래그 열거 형 일반 멤버를 사용 하지 마십시오 . .. 열거 형 값이 0 이면 문제 및 작업 등이 발생합니다.
글쎄, 나는 대답을 명시 적으로 번호를 매기 지 않는다고 말하는 대부분의 답변에 동의하지 않는 것 같습니다. 나는 항상 명시 적으로 번호를 매기지만, 대부분의 경우 정수 값으로 저장된 데이터 스트림에 유지하기 때문입니다. 명시 적으로 값을 추가하지 않은 다음 새 값을 추가하면 직렬화가 중단되고 오래된 지속 객체를 정확하게로드 할 수 없습니다. 이러한 값의 영구 저장소 유형을 수행하려는 경우 값을 명시 적으로 설정하는 것이 좋습니다.
Enum은 값 유형이며 명시 적으로 초기화되지 않은 경우 기본값 (예 : 클래스의 Enum 필드)은 0입니다.
따라서 일반적으로 정의 된 상수 (예 : 알 수 없음)로 0을 원합니다.
예를 들어, Inactive
기본값이 되려면 값이 0이어야합니다. 그렇지 않으면 상수 추가를 고려할 수 있습니다 Unknown
.
일부 사람들은 상수 값을 명시 적으로 지정하지 않는 것이 좋습니다. 대부분의 경우 좋은 조언이지만, 그렇게하고 싶을 때가 있습니다.
플래그 열거 형
외부 시스템과의 상호 운용에 사용되는 값을 가진 열거 형 (예 : COM)
특별한 이유가 없다면, 열거 형을 기본값 인 0으로 시작하십시오.
public enum Status : byte
{
Inactive,
Active
}
가장 좋은 방법은 번호를 지정하지 않고 암시 적으로 만드는 것입니다. 0에서 시작합니다. 암시 적이므로 항상 따라야하는 언어 기본 설정 :)
부울 타입 열거 형을 0으로 시작합니다.
"Inative"가 "Inactive"이외의 것을 의미하지 않는 한 :)
이것은 그 표준을 유지합니다.
사용 방법에 따라 다릅니다. enum을 플래그 지정하려면 다음 None
과 같이 값 을 0으로 설정하는 것이 좋습니다 .
[Flags]
enum MyEnum
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
All = Option1 | Option2 | Option3,
}
열거 형이 데이터베이스 조회 테이블에 매핑 될 가능성이 높으면 1로 시작합니다. 전문적으로 작성된 코드에는별로 중요하지 않지만 가독성이 향상됩니다.
다른 경우에는 0 또는 1로 시작하는지 여부를 신경 쓰지 않고 그대로 둡니다.
당신은 원시 값을 사용하는 좋은 이유가없는 한, 당신은 오직 암시 적 값을 사용하고 그들을 참조해야 Status.Active
하고 Status.Inactive
.
중요한 것은 플랫 파일이나 DB에 데이터를 저장하거나 다른 사람이 만든 플랫 파일이나 DB를 사용하고 싶을 수 있습니다. 직접 만드는 경우 번호 매기기가 Enum의 용도와 일치하도록 만드십시오.
데이터가 자신의 것이 아닌 경우 물론 원래 개발자가 번호 매기기 체계로 사용한 것을 사용하려고합니다.
Enum을 플래그 집합으로 사용하려는 경우 다음과 같은 간단한 규칙이 있습니다.
enum Example
{
None = 0, // 0
Alpha = 1 << 0, // 1
Beta = 1 << 1, // 2
Gamma = 1 << 2, // 4
Delta = 1 << 3, // 8
Epsilon = 1 << 4, // 16
All = ~0, // -1
AlphaBeta = Alpha | Beta, // 3
}
값은 2의 거듭 제곱이어야하며 비트 시프트 연산을 사용하여 표현할 수 있습니다. None
분명히되어야 0
하지만 All
덜 분명하다 -1
. ~0
이진의 부정 인 0
에 모든 비트 세트를 갖는 다수의 결과 1
, 의 값을 나타낸다-1
. 복합 플래그 (종종 편의상 사용됨)의 경우 비트 단위 또는 연산자를 사용하여 다른 값을 병합 할 수 있습니다 |
.
숫자를 할당하지 마십시오. 사용하는 것처럼 사용하십시오.
1에서 시작하면 쉽게 많은 것을 얻을 수 있습니다.
{
BOX_THING1 = 1,
BOX_THING2 = 2,
BOX_NUM_THING = BOX_THING2
};
If you start at 0, then use the first one as a value for uninitialized things.
{
BOX_NO_THING = 0,
BOX_THING1 = 1,
BOX_THING2 = 2,
BOX_NUM_THING = BOX_THING2
};
If not specified numbering starts at 0.
It is important to be explicit since enums are often serialized and stored as an int, not a string.
For any enum stored in the database, we always explicitly number the options to prevent shifting and reassignment during maintenance.
According to Microsoft, the recommended convention is use the first zero option to represent an uninitialized or the most common default value.
Below is a shortcut to start numbering at 1 instead of 0.
public enum Status : byte
{
Inactive = 1,
Active
}
If you wish to set flag values in order to use bit operators on enum values, don't start numbering at the zero value.
First of all, unless you're specifying specific values for a reason (the numeric value has meaning somewhere else, i.e. The Database or external service) then don't specify numeric values at all and let them be explicit.
Second of all, you should always have a zero value item (in non-flags enums). That element will be used as the default value.
Don't start them at 0 unless there's a reason to, such as using them as indices to an array or list, or if there's some other practical reason (like using them in bitwise operations).
Your enum
should start exactly where it needs to. It needn't be sequential, either. The values, if they are explicitly set, need to reflect some semantic meaning or practical consideration. For example, an enum
of "bottles on the wall" should be numbered from 1 to 99, while an enum
for powers of 4 should probably start at 4 and continue with 16, 64, 256, etc.
Furthermore, adding a zero-valued element to the enum
should only be done if it represents a valid state. Sometimes "none," "unknown," "missing," etc. are valid values, but many times they are not.
I like to start my enums at 0, since that's the default, but I also like to include a Unknown value, with a value of -1. This then becomes the default and can help with debugging sometimes.
참고URL : https://stackoverflow.com/questions/7257409/should-an-enum-start-with-a-0-or-a-1
'IT story' 카테고리의 다른 글
JRE 1.7-Java 버전-리턴 : java / lang / NoClassDefFoundError : java / lang / Object (0) | 2020.07.01 |
---|---|
이 사전 목록을 csv 파일로 어떻게 변환합니까? (0) | 2020.07.01 |
팩토리 패턴과 전략 패턴의 차이점은 무엇입니까? (0) | 2020.07.01 |
Excel 스프레드 시트에 쓰기 (0) | 2020.07.01 |
conda를 사용하여 Python 3.6으로 업그레이드하려면 어떻게합니까? (0) | 2020.07.01 |