110 votes

comment vérifier si la valeur de chaîne se trouve dans la liste Enum ?

Dans ma chaîne de requête, j'ai une variable d'âge ?age=New_Born.

Existe-t-il un moyen de vérifier si cette valeur de chaîne New_Born est dans ma liste Enum

[Flags]
public enum Age
{
    New_Born = 1,
    Toddler = 2,
    Preschool = 4,
    Kindergarten = 8
}

Je pourrais utiliser une déclaration pour le moment, mais si ma liste Enum s'agrandit. Je veux trouver une meilleure façon de le faire. Je pense à utiliser Linq, mais je ne sais pas comment le faire.

177voto

AaronS Points 4508

Vous pouvez utiliser :

 Enum.IsDefined(typeof(Age), youragevariable)

52voto

John Koerner Points 17899

Vous pouvez utiliser la méthode Enum.TryParse :

Age age;
if (Enum.TryParse<Age>("New_Born", out age))
{
    // You now have the value in age 
}

13voto

Fuex Points 6246

Vous pouvez utiliser la méthode TryParse qui renvoie true si elle réussit :

Age age;

if(Enum.TryParse<Age>("myString", out age))
{
   //Here you can use age
}

3voto

Andy Points 1118

J'ai une méthode d'extension pratique qui utilise TryParse, car IsDefined est sensible à la casse.

public static bool IsParsable<T>(this string value) where T : struct
{
    return Enum.TryParse<T>(value, true, out _);
}

1voto

agent-j Points 14703

Pour analyser l'âge :

Age age;
if (Enum.TryParse(typeof(Age), "New_Born", out age))
  MessageBox.Show("Defined");  // Defined for "New_Born, 1, 4 , 8, 12"

Pour voir si elle est définie :

if (Enum.IsDefined(typeof(Age), "New_Born"))
   MessageBox.Show("Defined");

Selon la façon dont vous prévoyez d'utiliser l'énumération Age, les drapeaux peuvent ne pas être la bonne chose. Comme vous le savez probablement, [Flags] indique que vous souhaitez autoriser plusieurs valeurs (comme dans un masque de bits). IsDefined renverra false pour Age.Toddler | Age.Preschool car il a plusieurs valeurs.

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