Prägnanteste Weg, um festzustellen, ob eine variable entspricht einem Wert aus einer "Liste" Werte

StackOverflow https://stackoverflow.com/questions/18407

  •  09-06-2019
  •  | 
  •  

Frage

Wenn ich eine variable in C# muss überprüft werden, um festzustellen, ob es gleich eine Reihe von Variablen, was ist der beste Weg, dies zu tun?

Ich bin nicht auf der Suche nach einer Lösung, speichert in einem array.Ich bin mehr neugierig, zu sehen, wenn es ist eine Lösung, verwendet, die Boolesche Logik in einige Weg, um die Antwort zu erhalten.

Ich weiß, ich könnte etwas tun wie diese:

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

Ich bin gespannt, ob ich das tun könnte so etwas wie diese:

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

Natürlich, die oben nicht funktioniert, aber ich bin daran interessiert zu sehen wenn es ist etwas kürzer, als mein erstes Beispiel, das zu wiederholen, die gleiche variable über und über wieder für jeden test Wert.

UPDATE:
Ich beschlossen, zu akzeptieren, CoreyN Antwort, wie es scheint, wie die meisten einfachen Ansatz.Es ist praktisch, und noch einfacher für einen Anfänger zu verstehen, denke ich.

Leider wo ich Arbeit, die unser system nutzt die .NET framework 2.0 und es gibt keine Möglichkeit, ein Upgrade in absehbarer Zeit.Gibt es andere Lösungen gibt, die nicht verlassen sich auf die .NET 3.5 framework, neben der offensichtlichste, das ich denken kann:

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

Lösung

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

Andere Tipps

Sie können tun, etwas ähnliches mit .NET 2.0, indem Sie die Tatsache nutzen, dass ein array von T implements IList<T>und IList<T> hat eine Methode Enthält.Daher das folgende ist äquivalent zu Corey .NET 3.5 Lösung, aber offensichtlich weniger klar:

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

Ich benutze oft IList<T> für array-Deklarationen, oder zumindest für die Weitergabe one-dimensional array-Argumente.Es bedeutet Sie verwenden können, IList Eigenschaften wie Anzahl, und wechseln Sie aus einem array zu einer Liste problemlos.E. g.

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

Normalerweise verwende ich CoreyN's Lösung für einfache Fälle.Etwas komplexer ist, verwenden Sie eine LINQ-Abfrage.

Da Sie nicht angeben, welche Art von Daten haben Sie als Eingang ich nehme an, Sie können partition Ihre Eingabe in Potenzen von 2 -> 2,4,8,16...Dies wird erlauben Sie zu verwenden die bits um festzustellen, ob Ihr test-Wert ist eines der bits in der Eingabe.

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

mit einigen binären Mathematik...

testList = 4 + 16 + 64 => 1010100
Testwert = 16
Testurteil = testList & Testwert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top