2014-05-15 4 views
1

나는 다음과 같은 주조했다 : 열거 형enum이 설정되지 않은 경우 어떻게됩니까?

int myInteger = (int)myItem.EnumValue; 

인 경우 : 내 관찰에서

public enum EnumValue 
{ 
    Yes= 0, 
    No = 1 
} 

가 myItem에 EnumValue는이 설정되지 않은 경우, EnumValue는의 값이 기본 설정에 보인다 예로 변경하고 0으로 캐스트하십시오.

열거 형이 null이 아닌 이유는 무엇입니까? 내 관찰이 정확하고 왜 그렇습니까?

답변

9

Enum은 값 유형이므로 int 및 다른 값 유형과 마찬가지로 null 일 수 없습니다. 대신 그들의 기본값은 0과 같습니다 (Yes의 열거 형 값을 0으로 지정 했으므로이 값은 기본값입니다).

nullable enum을 원하면 Nullable<EnumValue> 또는 EnumValue?을 짧게 사용하십시오.

더 읽을

2

enum 변수는 본질적으로 enum 기본 유형의 변수입니다. 기본적으로 정수입니다. 정수는 널값을 가질 수 없습니다.

UPDATE : Under hood 열거 같은

class public auto ansi sealed EnumValue extends [mscorlib]System.Enum 
{ 
    .field public static literal EnumValue Yes = int32(0x00000000) 
    .field public static literal EnumValue No = int32(0x00000001) 

    .field public specialname rtspecialname int32 value__ 
} 

즉 보인다 컴파일시에 인라 인되는 상수 세트와 enum 값을 보유하는 정수 필드 (기본값). 그 이유는 어떤 정수 값을 EnumValue 유형의 변수에 할당 할 수 있기 때문입니다. 그래서 기본적으로 값이 0입니다. 그것이 null 일 수없는 이유입니다.

1

열거 형이 null이 아닌 이유는 무엇입니까?

enum은 절대 값 유형이 아니기 때문에 null 일 수 없습니다.

+0

글쎄, 당신이 말할 게있어? –

1

열거의 기본 형식은 항상 필수입니다. the docs에서 :

모든 열거 형은 문자를 제외한 모든 통합 유형이 될 수있는 기본 유형을 가지고 있습니다. 열거 형 요소의 기본 기본 형식은 int입니다.

귀하가 int를 기반으로하므로 열거 형의 기본값은 정수의 기본값이며 0입니다.

2

여러 답변이 널 (NULL) 열거 형을 사용하는 것이 좋습니다,하지만 당신은 또한 nullable 형식의 오버 헤드없이 열거에 유사한 논리를 구축 할 수 있습니다 :

public enum EnumValue 
{ 
    Unknown = 0, 
    Yes = 1, 
    No = 2 
} 

열거의 기본 값이 0이기 때문에, 기본값은 Unknown입니다 . 다음과 같이 값이 0 인 필드를 정의하지 않더라도 기본값은 0입니다.

public enum EnumValue 
{ 
    Yes = 1, 
    No = 2 
} 
관련 문제