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

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

Est-il possible de vérifier si cette valeur de chaîne New_Born figure dans ma liste Enum

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

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

Vous pouvez utiliser:

  Enum.IsDefined(typeof(Age), youragevariable) 

Vous pouvez utiliser la méthode Enum.TryParse:

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

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

 Age age; if(Enum.TryParse("mySsortingng", out age)) { //Here you can use age } 

Je sais que c’est un ancien thread, mais voici une approche légèrement différente utilisant des atsortingbuts sur les énumérateurs, puis une classe auxiliaire pour trouver l’énumération qui correspond.

De cette façon, vous pourriez avoir plusieurs mappages sur une seule énumération.

 public enum Age { [Metadata("Value", "New_Born")] [Metadata("Value", "NewBorn")] New_Born = 1, [Metadata("Value", "Toddler")] Toddler = 2, [Metadata("Value", "Preschool")] Preschool = 4, [Metadata("Value", "Kindergarten")] Kindergarten = 8 } 

Avec mon aide comme ça

 public static class MetadataHelper { public static ssortingng GetFirstValueFromMetaDataAtsortingbute(this T value, ssortingng metaDataDescription) { return GetValueFromMetaDataAtsortingbute(value, metaDataDescription).FirstOrDefault(); } private static IEnumerable GetValueFromMetaDataAtsortingbute(T value, ssortingng metaDataDescription) { var atsortingbs = value.GetType().GetField(value.ToSsortingng()).GetCustomAtsortingbutes(typeof (MetadataAtsortingbute), true); return atsortingbs.Any() ? (from p in (MetadataAtsortingbute[]) atsortingbs where p.Description.ToLower() == metaDataDescription.ToLower() select p.MetaData).ToList() : new List(); } public static List GetEnumeratesByMetaData(ssortingng metadataDescription, ssortingng value) { return typeof (T).GetEnumValues().Cast().Where( enumerate => GetValueFromMetaDataAtsortingbute(enumerate, metadataDescription).Any( p => p.ToLower() == value.ToLower())).ToList(); } public static List GetNotEnumeratesByMetaData(ssortingng metadataDescription, ssortingng value) { return typeof (T).GetEnumValues().Cast().Where( enumerate => GetValueFromMetaDataAtsortingbute(enumerate, metadataDescription).All( p => p.ToLower() != value.ToLower())).ToList(); } } 

vous pouvez alors faire quelque chose comme

 var enumerates = MetadataHelper.GetEnumeratesByMetaData("Value", "New_Born"); 

Et pour être complet, voici l’atsortingbut:

  [AtsortingbuteUsage(AtsortingbuteTargets.Field, Inherited = false, AllowMultiple = true)] public class MetadataAtsortingbute : Atsortingbute { public MetadataAtsortingbute(ssortingng description, ssortingng metaData = "") { Description = description; MetaData = metaData; } public ssortingng Description { get; set; } public ssortingng MetaData { get; set; } } 

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

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

Vous devez utiliser Enum.TryParse pour atteindre votre objective

Ceci est un exemple:

 [Flags] private enum TestEnum { Value1 = 1, Value2 = 2 } static void Main(ssortingng[] args) { var enumName = "Value1"; TestEnum enumValue; if (!TestEnum.TryParse(enumName, out enumValue)) { throw new Exception("Wrong enum value"); } // enumValue contains parsed value } 

Pour parsingr 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 indicateurs ne sont peut-être pas 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 Age.Toddler | Age.Preschool car il a plusieurs valeurs.