2010-12-22 5 views
5

나는 Enum (The base class)을 매개 변수로 받아들이는 함수를 가지고있다.열거 형을 int로 변환하는 방법은 무엇입니까?

public void SomeFunction(Enum e); 

그러나 어떤 이유로 int로 변환 할 수 없다. 열거 형 값의 이름을 얻을 수 있지만 정수 표현이 아닙니다.
열거 형의 유형에 대해서는별로 신경 쓰지 않고 정수 값만 필요합니다. 대신 int를 전달해야합니까? 아니면 여기서 뭔가 잘못하고있는 걸까요?

+0

정확히 캐스팅하려고합니까? – annakata

+1

@annakata " 'System.Enum'을 'int'로 변환 할 수 없습니다." –

+0

@annakata : 나는 분명하다고 생각했습니다. 마크 말이 맞아. –

답변

7

Enum 실제로 열거 형이 아닙니다 ... 혼란 스럽습니다. 열거 형의 박스형 사본입니다. 여전히 다음과 같은 작업을해야합니다 : 또한 모든 열거 형은 int을 기반으로하지

int i = (int)(object)e; 

(이미 박스때문에이 (object) 캐스팅, 상자를 추가하지 않음); 이 unboxing 트릭은 int enums에 대해 실패 할 수 있습니다.

+0

'Enum'의 실제 유형 (예 : Reflection.BindingFlags)이 알려진 경우이를 캐스팅하여 간단히 정수 또는 긴 값으로 사용할 수 있습니다. 기본 유형이 사용하는 유형보다 크지 않은 enum 유형에 대해서는 작동합니다. – supercat

0
Int32 intValue = (Int32)Enum.Parse(e.GetType(), e.ToString()); 
13
int i = Convert.ToInt32(e); 

다른 솔루션이 InvalidCastException가 발생하는 반면 열거가 int32 이외의에 저장되어있는 경우는, 열거의 기본 스토리지에 상관없이 작동합니다 (예를 들어하는 byte 또는 short)

관련 문제