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

다음과 같은 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 값만 확인합니다. 어떻게 할 수 있습니까?



답변

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
}

출처


답변

이 시도:

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


답변

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

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

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


답변

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

string strType;
if(Enum.TryParse(strType, out MyEnum myEnum))
{
    // use myEnum
}


답변