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))
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))
Verwenden LINQ:
if ((new[] {1,2,4,5}).Contains(someInt))
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.
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)
zur Kenntnis nehmen, dass die OP nicht enthalten '3' als akzeptabel in seinen Kriterien – psubsee2003
korrigiert. Vielen Dank! – daniloquio
Entfernen Sie die redundante '== true' ... –
Als Alternative können Sie:
switch(someInt)
{
case 1:
case 2:
case 4:
case 5:
DoYourStuff();
break;
}
+1 - Ich tippte genau die gleiche Lösung, als ich sah, dass es neue Antworten gab :) – Riaan
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");
}
}
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) {
}
+1 - Nizza, saubere LINQ Lösung – Riaan
Liebe mich etwas Linq. –
Sie können es etwas sauberer machen, indem Sie: 'if (Enumerable.Range (1,5) .Contains (someInt)) –