Kurz und bündig ermitteln, ob eine Variable einem Wert aus einer "Liste" von Werten entspricht


9

Wenn ich eine Variable in C# habe, die geprüft werden muss, um festzustellen, ob sie einer Variablen entspricht, was ist das? beste Möglichkeit, dies zu tun?

Ich bin nicht auf der Suche nach einer Lösung, die das Set in einem Array speichert. Ich bin eher neugierig, ob es eine Lösung gibt, die in irgendeiner Weise eine logische Logik verwendet, um die Antwort zu erhalten.

Ich weiß, dass ich etwas tun könnte:

int baseCase = 5; 
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5; 

Ich bin gespannt zu sehen, ob ich etwas mehr wie dies tun könnte:

int baseCase = 5; 
bool testResult = baseCase == (3 | 7 | 12 | 5); 

Offensichtlich wird nicht funktionieren, die oben, aber ich bin daran interessiert zu sehen, ob es etwas prägnanter als mein erstes Beispiel gibt, das die gleiche Variable für jeden Testwert immer wieder wiederholen muss.

UPDATE:
entschied ich mich CoreyN Antwort zu akzeptieren, wie es wie der einfachste Ansatz scheint. Es ist praktisch und für einen Anfänger immer noch einfach zu verstehen, denke ich.

Leider, wo ich arbeite, verwendet unser System das .NET 2.0 Framework und es gibt keine Möglichkeit, es in absehbarer Zeit zu aktualisieren. Gibt es andere Lösungen gibt, die auf .NET 3.5 Framework verlassen Sie sich nicht neben der offensichtlichste kann ich mir vorstellen:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5); 
  0

Hier ist ein .NET 2.0 Lösung, ein bisschen komplexer als Coreys: http://StackOverflow.com/Questions/18407#153037 30 sep. 082008-09-30 13:38:51

  0

Ein Javascript-Beispiel http://StackOverflow.com/Questions/12116326 21 jan. 152015-01-21 21:23:45

16
 bool b = new int[] { 3,7,12,5 }.Contains(5); 

0

I CoreyN ‚s in der Regel solution für einfache Fälle verwenden wie Das. Etwas komplizierter, verwenden Sie eine LINQ-Abfrage.


-1

Da Sie nicht angegeben haben, welche Art von Daten Sie als Eingabe haben, gehe ich davon aus, dass Sie Ihre Eingabe in Potenzen von 2 -> 2,4,8,16 ... partitionieren können die Bits, um zu bestimmen, ob Ihr Testwert eines der Bits in der Eingabe ist.

4 => 0000100
16 => 0010000
64 => 1000000

einige binäre Berechnungen mit ...

Testlist = 4 + 16 + 64 => 1010100
Testvalue = 16
Tester = Testlist & Testvalue


1

Sie etwas ähnliches mit .NET 2.0, unter Ausnutzung der Tatsache, dass ein Array tun o f T implementiert IList <T> und IList <T> hat eine Contains-Methode. Folgendes ist daher äquivalent zu Corey NET 3.5 Lösung, obwohl offensichtlich weniger klar:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

I verwendet oft IList < > T für die Array-Erklärungen, oder zumindest für die Weitergabe eindimensionale Array Argumente. Dies bedeutet, dass Sie IList-Eigenschaften wie Count verwenden und problemlos von einem Array zu einer Liste wechseln können. Z.B.

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };