2012-04-02 15 views
0

Wie kann ich testen, ob der Wert von int beispielsweise 1,2,4 oder 5 ist? Ich dachte, ich könnte so etwas tun, aber anscheinend nicht.Wert von int vergleichen

if(someInt == (1||2||4||5)) 

Antwort

4

Verwenden LINQ:

if ((new[] {1,2,4,5}).Contains(someInt)) 
+0

+1 - Nizza, saubere LINQ Lösung – Riaan

+0

Liebe mich etwas Linq. –

+1

Sie können es etwas sauberer machen, indem Sie: 'if (Enumerable.Range (1,5) .Contains (someInt)) –

1

Sie benötigen if Aussage wie diese

if (someInt==1 || someInt==2 || someInt==4 || someInt==4) 

schreiben Sie können auch eine switch Aussage

switch (someInt) 
{ 
    case 1: 
    case 2: 
    case 4: 
    case 5: 
     // do something 
     break; 
} 

Brechen Sie Ihre versuchten Code verwenden, ist recht interessant. Sie schrieb:

if(someInt == (1||2||4||5)) 

Ich denke, in Ihrem Kopf Sie es lesen wie, wenn someInt gleich 1 oder 2 oder 4 oder 5. Und wenn sich Computer wie Menschen benahmen, würde das funktionieren. Aber wir alle wissen, dass sich Computer nicht so verhalten!

Der Gleichheitsoperator ==, ein binärer Operator, gibt true zurück, wenn seine beiden Operanden gleich sind. Das heißt, in Ihrer Version, wenn es kompiliert wurde, müssten Sie gleich (1||2||4||5) sein. Und damit das überhaupt aussagekräftig ist, müssten wir (1||2||4||5) zu einem einzigen Wert auswerten, anstatt einen Kompilierungsfehler zu erzeugen. Und wenn es zu einem einzigen Wert ausgewertet wird, dann könnte es nicht die Bedeutung haben, die Sie wollen. Weil Sie möchten, dass der Test wahr zurückgibt, wenn gleich einem von vier möglichen Werten ist.

Die Quintessenz ist, dass == Tests für exakte Gleichheit zwischen genau zwei Werten.

0

Sie können es nicht so machen. Stattdessen verwenden:

if(someInt == 1 || someInt == 2 || someInt == 4 || someInt == 5) 

Oder auch könnte man so etwas wie folgt verwenden:

if((new List<int>() {1,2,4,5}).Contains(someInt) == true) 
+0

zur Kenntnis nehmen, dass die OP nicht enthalten '3' als akzeptabel in seinen Kriterien – psubsee2003

+0

korrigiert. Vielen Dank! – daniloquio

+0

Entfernen Sie die redundante '== true' ... –

1

Als Alternative können Sie:

switch(someInt) 
{ 
    case 1: 
    case 2: 
    case 4: 
    case 5: 
     DoYourStuff(); 
     break; 
} 
+0

+1 - Ich tippte genau die gleiche Lösung, als ich sah, dass es neue Antworten gab :) – Riaan

3

Schreiben Sie eine Erweiterungsmethode

static class MiscExtensions 
{ 
    static bool EqualToAny<T>(this T i, params T[] items) 
    { 
     return items.Any(x => x.Equals(i)); 
    } 
} 

Und wie nutzen so

static class Program 
{ 
    static void Main(string[] args) 
    { 
     int myNumber = 5; 
     if (myNumber.EqualToAny(1, 2, 3, 4, 5)) 
      Console.WriteLine("Hello, World"); 
    } 
} 
1

Es gibt zwei Möglichkeiten, die ich mir vorstellen kann.

Oder alle Vergleiche.

Oder für eine flexiblere Lösung sehen, ob SomeInt in einem Array ist.

if (Array.BinarySearch(new[] { 1, 2, 4, 5 }, someInt) != -1) { 

}