web-dev-qa-db-fra.com

Comment vérifier si un enum contient un numéro?

J'ai un Enum comme ça:

 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 numéro que je donne. Par exemple: quand je donne 4, Enum contient cela, donc je veux renvoyer Vrai, si je donne 7, il n’ya pas 7 dans cet Enum, donc il retourne Faux. J'ai essayé Enum.IsDefine mais cela ne fait que vérifier la valeur de la chaîne. Comment puis je faire ça?

60
Jack Zhang

La méthode IsDefined nécessite deux paramètres. Le 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 second 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 à rechercher. La valeur de retour est un booléen qui est vrai si la valeur existe et faux dans le cas contraire.

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

134
John Woo

Essaye ça:

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

Tu devrais utiliser Enum.IsDefined.

J'ai essayé Enum.IsDefine mais cela ne fait que vérifier la valeur de la chaîne.

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

6
Cheng Chen

Peut-être voudrez-vous vérifier et utiliser l'énumération de la valeur de chaîne:

if(Enum.TryParse(strType, out MyEnum myEnum)))
{
    // use myEnum
}
1
Hulzi