2012-11-27 3 views
1

두 개의 열거 자 및 열거자를 사용하는 메소드가 있습니다. 그것들은 ABC와 DEF라고 불리고 메소드는 TestMethod (Enum myEnum)라고 불린다. 코드는 다음과 같습니다.Enum의 유형 결정

public enum ABC 
{ 
    Zero, 
    One, 
    Two 
}; 

public enum DEF 
{ 
    Zero, 
    One, 
    Two 
}; 

public void TestEnum(Enum myEnum) 
{ 
    ... 
} 

함수 TestEnum은 모든 열거자를 취합니다. 전달 된 매개 변수 중 두 매개 변수 중 어느 매개 변수가 속해 있는지 테스트하려면 어떻게해야합니까? 나는 맹목적으로 try/catch 캐스팅으로 테스트를 시작할 수 있지만 엉망이된다. 이것을하는 더 청결한 방법? 사전에 도움을 주셔서 감사합니다.

답변

6

두 매개 변수 중 어느 매개 변수가 매개 변수에 속하는지 테스트 할 수 있습니까?

당신은 GetType를 호출 할 수

Type type = myEnum.GetType(); 

마음을, 그 후에 그것으로을 에 원하는 걸 분명하지 않다. 또한

:

if (myEnum is ABC) 
{ 
} 
else if (myEnum is DEF) 
{ 
} 

편집 : 당신이 당신의 발신자 유형을 알 수있는 경우 Jeppe의 의견에 따라 다음 방법 서명 을 변경 할 수 있다면, 당신은 사용할 수 있습니다

public void TestEnum<T>(T value) where T : struct 
{ 
    // Use typeof(T) here 
} 

을 일반 C#으로 열거 형으로 제한 할 수는 없지만 후 처리를 통해 적용되는 이러한 제약 조건을 가진 코드 작성은 hacky ways입니다.

+1

존 크리 스 존, 나는 12 분 동안 대답조차 받아 들일 수 없다. 내가 이것을 게시하기 전에 내 마음을 읽고 쓴거야? Lol. 가능한 한 빨리 체크 표시를하고, 번개처럼 빠른 응답을 주심을 감사드립니다. 그리고 그런 멍청한 질문에 대한 애도를 말하십시오. < – Lukas

+0

@ 루카스 당신은 또한 당신의 방법을 일반적인 것으로 만들 수 있습니다. 이것은 이렇게됩니다 :'public void TestEnum (TEnum myEnum) 여기서 TEnum : struct {/ * method body here * /}'. 이것은 권투를 피할 수 있습니다. 예를 들어'typeof (TEnum) '을 사용하여 타입을 얻을 수 있습니다. 이 문제는 C# 언어가 타입 매개 변수 'TEnum'을 열거 형으로 제한 할 수 없다는 것입니다. –

+0

@JeppeStigNielsen : 그 옵션을 추가하겠습니다. (나는 방법 서명이 고정되었다고 가정 했었습니다.) 제 제한되지 않은 멜로디 라이브러리를보고 싶을 수도 있습니다 :) https://code.google.com/p/unconstrained-melody/ –

1

미스터 스키켓은 이미 이걸 놨어!

두 가지 방법은 무엇입니까?

public void TestEnum(ABC abcEnum) { 
    //do ABC stuff 
} 

public void TestEnum(DEF defEnum) { 
    //do DEF stuff 
} 

당신은 당신이 필요로 분기하지만 바로 if 문을 것에 대해 걱정할 필요없이 얻을. 사실 그것은 if 문일 뿐이지 만 enum GHI를 추가하면 어떨까요? 이제 TestEnum이 처리 할 입력에 대해 설명되지 않은 몇 가지가 있습니다. 오버로드 된 메서드를 사용하면 컴파일하는 동안 그것을 잡을 수 있습니다 (또는 더 나은, intellisense 잡을 것입니다).

+0

많은 정답이 있지만 Jon 's를 사용하고 있습니다. 정확한 것이기 때문에 요점을 알려 드리겠습니다. – Lukas