2014-02-18 3 views
-2

열거 형 멤버를 사용하여 int 값을 필요로하는 메서드를 어떻게 호출 할 수 있습니까? 호출 된 메서드가 열거 형에 대해 알고 싶어하지 않습니다. (이미 알아 낸로) int 명시 적으로열거 형 멤버를 메서드에 전달

public enum Volume : int 
{ 
    Low = 1, 
    Medium = 2, 
    High = 3 
} 

public void Start() { 
    DoSomeWork(Volume.Low); //this complains 
    //this works DoSomething((int)Volume.Low); 

} 

public void DoSomeWork(int vol) { 
    //Do something 
} 
+4

귀하는 직접 질문에 답변 해드립니다. 왜 그런 질문을합니까? 그렇게 말하면, 메소드가 enum을 받아들이는 것이 훨씬 낫습니다. 그것이 매직 int를 받아들이면, int가 무엇을 의미하는지 기억할 필요가있는 호출자에게는이 메소드를 매우 혼란스럽게 만들 것입니다. – Servy

답변

3

캐스트를 : 많은 경우가 있기 때문에

가 기본 형식으로 열거에서

암시 적 변환이 금지되어

DoSomeWork((int)Volume.Low) 
,이 변환하지 않습니다 말이 되네. @EricLippert는 이것을 잘 설명합니다 here.

그러나 열거 형을 사용하지 않는 이유는 무엇입니까? 열거 형에 의해 프로그램의 볼륨 속도가 지정되면 메소드가 매개 변수로 기대해야하는 유형입니다. 이 같은

+0

네,하지만 이드는 아닙니다. 컴파일러는 Volume.Low가 int 유형이라는 것을 알고 있어야합니까? 특히 열거 형의 기본 유형을 설정 한 이후입니까? – bitshift

+0

@bitshift, 약간의 설명이있는 업데이트를 참조하십시오. – Andrei

+0

글쎄, 이제까지 살펴 보았습니다. enum 멤버와 int는 모두 같은 intregal 유형일 수 있습니다. 하나에서 다른쪽으로 이동하려면 명시 적 형변환이 필요합니다. http://csharp-station.com/Tutorial/CSharp/Lesson17 – bitshift

1

전화를 : 문서로

public void DoSomeWork(Volume volume) { 
    //Do something 
} 
0

이 방법을 사용하지 않는 이유 그런 식으로 방법에 전달하십시오.

DoSomeWork((int)Volume.Low); 
0

그래서 그냥 간단한 캐스트가 int로 할 수

Every enumeration type has an underlying type, which can be any integral type except char. The default underlying type of the enumeration elements is int.

을 상태 :

DoSomeWork((int) Volume.Low); 
관련 문제