2010-12-16 11 views
2

Wie kann ich schnell mein enum obj suchen und herausfinden, ob das enum obj ein anderes Eingabeelement enthält/nicht?Frage zum Nachschlagen Aufzählungselement in C#

public enum myen 
{ 
    S1, 
    S2, 
    S3, 
} 

other member like s2 or s4. 

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

Was genau möchten Sie erreichen? Dies ist sehr pseudo-Code und nicht sehr klar. Was meinst du mit Input-Mitglied? – Josh

+0

@Josh, sollte ich verwenden * ist definiert oder nicht * als Schlüsselwörter in meinem ursprünglichen Beitrag. Vielen Dank. –

Antwort

2

Enum.IsDefined oder Verwendung Enum.GetNames auf das, was ist die Eingabe, die Sie haben.

// => 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

Ich kann die Methode von 'IsDefined' nicht finden. Wo hat es gelegen? Vielen Dank. –

+0

@Nano - Es ist eine statische Methode für die Enum-Klasse. Stellen Sie sicher, dass Sie System in Ihrer Quelldatei verwenden, damit der Systemnamespace erreichbar ist. – Gishu

+0

Das ist nicht "schnell", vorausgesetzt, dies ist ein Effizienzproblem. – Mehrdad

2

Ich empfehle Ihre eigene Version von Enum.IsDefined() zu schreiben, die auf Generika, und dass die Caches Ergebnisse statt Boxen und Unboxing die Werte basiert; das kann zu der "schnellen" Suche führen, die Sie in Ihrer Frage angegeben haben.

+0

+1 es verwendet Reflektion - also überlege andere Optionen, bevor du es in einen perf-sensitiven/freq genannten Bereich einbaust. – Gishu

+0

Es verwendet Reflexion, aber das ist eigentlich nicht so schlimm, wenn Sie die gleiche Art von Überprüfung (selbe enum) häufig tun, da die Objekte intern zwischengespeichert werden; Es wird signifikant, wenn der Cache ausläuft (weil verschiedene Enums nacheinander überprüft werden) und die Reflektion tatsächlich stattfinden muss. – Mehrdad