2010-12-16 241 views
2

Comment puis-je rapidement rechercher mon obj enum et trouver l'enum obj inclure/ne pas inclure un autre membre d'entrée?Question sur Rechercher membre Enum en C#

public enum myen 
{ 
    S1, 
    S2, 
    S3, 
} 

other member like s2 or s4. 

intput s2 -> true; // included 
input s4 -> false; // not include 
+0

Qu'essayez-vous exactement d'accomplir? C'est très pseudo-code et pas très clair. Que voulez-vous dire par membre d'entrée? – Josh

+0

@Josh, je devrais utiliser * est défini ou non * comme des mots-clés dans mon message original. Je vous remercie. –

Répondre

2

Enum.IsDefined ou utilisation Enum.GetNames en fonction de ce qui est l'entrée que vous avez.

// => true 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S3"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S3")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 2)); 

// => false 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S4"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S4")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 3)); 
+0

Je ne trouve pas la méthode de 'IsDefined'. Où se trouve-t-il? Je vous remercie. –

+0

@Nano - C'est une méthode statique sur la classe Enum. Vérifiez que vous utilisez 'System' dans votre fichier source afin que l'espace de noms System soit accessible. – Gishu

+0

Ce n'est pas "rapide" cependant, en supposant que c'est un problème d'efficacité. – Mehrdad

2

Je recommande d'écrire votre propre version de Enum.IsDefined() qui est basé sur les génériques, et que les résultats de caches au lieu de la boxe et unboxing les valeurs; Cela peut entraîner la recherche "rapide" que vous avez indiquée dans votre question.

+0

+ 1 il utilise la réflexion - considérez donc d'autres options avant de l'incorporer dans une zone appelée perf/freq appelée. – Gishu

+0

Il utilise la réflexion, mais ce n'est pas si grave si vous faites le même genre de vérification (même énumération) fréquemment, car les objets sont mis en cache en interne; il devient important si le cache est épuisé (parce que différentes énumérations sont vérifiées les unes après les autres) et que la réflexion doit effectivement se produire. – Mehrdad