열거 형 변수의 기본값은 무엇입니까?


240

열거 형 변수, 누구든지 항상 첫 번째 요소를 기본값으로 사용하는지 알고 있습니까?


1
기본 열거 형이 필요한 유스 케이스에 대한 한 가지 고려 사항은 널 입력 가능 변수를 사용하는 것입니다. null이 수신되면 코드의 올바른 부분에서 기본값으로 변환 될 수 있으며이 기본값은 나머지 코드에서 알 필요가 없습니다 (단지 null을 통과 함).
ErikE

답변:


381

열거의 멤버가 값을 나타내는 것은 무엇이든 0입니다. 구체적으로, 설명서에서 :

의 기본값 enum E은 표현식으로 생성 된 값 (E)0입니다.

예를 들어 다음 열거 형을 사용하십시오.

enum E
{
    Foo, Bar, Baz, Quux
}

기본값을 무시하지 않고 인쇄 default(E)Foo첫 번째 발생 요소이므로 반환합니다 .

그러나는 항상되지 하는 경우 0열거의 제 부재로 표현된다. 예를 들어, 이렇게하면 :

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

인쇄 default(F)Quux하지 않습니다 Foo.

만약 열거의 요소가 없음 G에 해당합니다 0:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G)0타입은 G(위의 문서에서 인용했듯이 주어진 열거 형으로 캐스트 된 그대로) 그대로 그대로 그대로 반환합니다 .


1
고마워, int 대신 char로 정의 된 열거 형은 어떻습니까? 예 : enum Status {Active = 'A', Inactive = 'I'}
Fernando Torres

3
@Fernando Torres : 열거 형 값 중 하나가 '\0'또는에 해당하지 않는 한 여전히 0입니다. 문자 코드 0에 해당하는 NUL 문자 default(char)이므로 가능성이 매우 낮습니다.default(char)
BoltClock

나는 (올바르게?) DefaultValue속성 을 사용하면 System.ComponentModel.DefaultValue(MyEnum.Blah)동작을 수정할 수 default(MyEnum)있지만 여전히 0을 산출 한다고 가정 enum했습니다. 기본값 주위에 추상화를 만들 수있는 방법이 있습니까?
Craig Silver

2
@Craig Silver : DefaultValue 특성이 속성에 적용됩니다. 열거 형은 유형이므로 DefaultValue는 열거 형 유형에 전체적으로 영향을 미치지 않습니다. 나는 당신이 일종의 확장 방법으로 이것을 해결할 수 있다고 생각하지만, 당신은 0을 확인하는 것이 좋습니다.
BoltClock

11

열거 형의 값 순서에 의존하고 첫 번째 값이 항상 기본값이라고 가정하는 것이 매우 위험하다고 생각합니다. 기본값 보호에 관심이있는 경우이 방법이 좋습니다.

enum E
{
    Foo = 0, Bar, Baz, Quux
}

그렇지 않으면 주문의 부주의 한 리 팩터 만 있으면 완전히 다른 기본값을 갖게됩니다.


3
당신이 잘못해서 죄송합니다. 저도 같은 가정했지만 당신이 세우면 FooBar모두 FooBar0의 값을가집니다 및 E.Foo == E.Bar반환합니다 true. 너무 어리 석고 반 직관적이지만 사실입니다 :(
Pawcio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.