Як перевірити, чи містить 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. Як я можу це зробити?


Можливий дублікат перевірки значень Enum
блакитний

Відповіді:


180

IsDefinedМетод вимагає два параметри . Першим параметром є тип перерахування для перевірки . Цей тип зазвичай отримують за допомогою виразу typeof. Другий параметр визначається в якості основного об'єкта . Він використовується для вказівки цілочисельного значення або рядка, що містить ім'я константи для пошуку. Повернене значення - це логічне значення, яке є істинним, якщо значення існує, і хибним, якщо воно не існує.

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.

Я впевнений на 100%, що він перевірить як значення рядка, так і значення int (основне), принаймні на моїй машині.


1
Thx, це мої помилки, я забув перетворити рядок на Int, тому Enum.isDefined завжди отримує значення false, коли я даю правильний номер.
Джек Чжан,

Це, безумовно, може взяти (подання рядка з урахуванням регістру) - див . Документи або джерело для отримання додаткової інформації.
Вай Ха Лі

4

Можливо, ви хочете перевірити та використовувати перелік значення рядка:

string strType;
if(Enum.TryParse(strType, out MyEnum myEnum))
{
    // use myEnum
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.