Enum에 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?


79

다음과 같은 Enum이 있습니다.

 public enum PromotionTypes
{
    Unspecified = 0, 
    InternalEvent = 1,
    ExternalEvent = 2,
    GeneralMailing = 3,  
    VisitBased = 4,
    PlayerIntroduction = 5,
    Hospitality = 6
}

이 Enum에 내가 제공 한 숫자가 포함되어 있는지 확인하고 싶습니다. 예 : 내가 4를 줄 때 Enum은 그것을 포함하므로 True를 반환하고 싶습니다 .7을 줄 경우이 Enum에는 7이 없으므로 False를 반환합니다. Enum.IsDefine을 시도했지만 String 값만 확인합니다. 어떻게 할 수 있습니까?


답변:


180

IsDefined메서드에는 두 개의 매개 변수 가 필요합니다 . 첫 번째 매개 변수는 검사 할 열거 유형입니다 . 이 유형은 일반적으로 typeof 표현식을 사용하여 얻습니다. 두 번째 매개 변수는 기본 개체로 정의됩니다 . 찾을 상수 이름이 포함 된 문자열 또는 정수 값을 지정하는 데 사용됩니다. 반환 값은 값이 존재하면 true이고 존재하지 않으면 false 인 부울입니다.

enum Status
{
    OK = 0,
    Warning = 64,
    Error = 256
}

static void Main(string[] args)
{
    bool exists;

    // Testing for Integer Values
    exists = Enum.IsDefined(typeof(Status), 0);     // exists = true
    exists = Enum.IsDefined(typeof(Status), 1);     // exists = false

    // Testing for Constant Names
    exists = Enum.IsDefined(typeof(Status), "OK");      // exists = true
    exists = Enum.IsDefined(typeof(Status), "NotOK");   // exists = false
}

출처


8

이 시도:

IEnumerable<int> values = Enum.GetValues(typeof(PromotionTypes))
                              .OfType<PromotionTypes>()
                              .Select(s => (int)s);
if(values.Contains(yournumber))
{
      //...
}

7

당신은 사용해야합니다 Enum.IsDefined.

Enum.IsDefine을 시도했지만 String 값만 확인합니다.

적어도 내 컴퓨터에서 문자열 값과 int (기본) 값을 모두 확인할 것이라고 100 % 확신합니다.


1
Thx, 그것은 내 실수입니다. 문자열을 Int로 변환하는 것을 잊었으므로 Enum.isDefined는 올바른 숫자를 제공하면 항상 false가됩니다.
잭 장

확실히 (대소 문자 구분 문자열 표현)을 취할 수 있습니다- 자세한 정보 는 문서 또는 소스 를 참조하십시오.
Wai Ha Lee

4

문자열 값의 열거 형을 확인하고 사용하고 싶을 수도 있습니다.

string strType;
if(Enum.TryParse(strType, out MyEnum myEnum))
{
    // use myEnum
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.