130 votes

Comment vérifier si un Enum contient un nombre ?

J'ai un Enum comme ceci :

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

Je veux vérifier si cet Enum contient un nombre que je donne. Par exemple : Quand je donne 4, l'Enum le contient, donc je veux retourner True, Si je donne 7, il n'y a pas 7 dans cet Enum, donc il retourne False. J'ai essayé Enum.IsDefine mais il ne vérifie que la valeur String. Comment puis-je faire cela ?

269voto

John Woo Points 132738

En IsDefined La méthode exige deux paramètres . Le site Le premier paramètre est le type de l'énumération à vérifier. . Ce type est généralement obtenu à l'aide d'une expression typeof. Le site le deuxième paramètre est défini comme un objet de base . Il est utilisé pour spécifier soit la valeur entière, soit une chaîne contenant le nom de la constante à trouver. La valeur de retour est un booléen qui est vrai si la valeur existe et faux si elle n'existe pas.

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
}

SOURCE

13voto

horgh Points 8992

Essayez ça :

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

12voto

Danny Chen Points 14781

Vous devez utiliser Enum.IsDefined .

J'ai essayé Enum.IsDefine mais il ne vérifie que la valeur String.

Je suis sûr à 100% qu'il vérifiera à la fois la valeur de la chaîne et la valeur de l'int(le sous-jacent), du moins sur ma machine.

8voto

Hulzi Points 39

Vous voulez peut-être vérifier et utiliser l'enum de la valeur de la chaîne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X