So bestimmen Sie, ob alle drei gleich sind

8

Hallo, ich habe drei Ints: Wert1, Wert2 und Wert3.

Wie kann ich am besten feststellen, ob sie alle gleich sind?

Ich habe es versucht:

%Vor%

Aber das sagte:

  

Operator '==' kann nicht auf Operanden vom Typ 'bool' und 'int' angewendet werden.

Ich denke also, es vergleicht die ersten zwei, die einen booleschen Wert zurückgeben, den es mit dem dritten zu vergleichen versucht.

Ich könnte gehen:

%Vor%

Aber das scheint unordentlich zu werden.

Hat jemand einen guten Vorschlag?

    
AnonyMouse 14.11.2011, 01:26
quelle

6 Antworten

5

Das zweite scheint mir gut zu sein.

Wenn die Liste länger wird, könnte das unhandlich werden. In diesem Fall würde ich eine Erweiterungsmethode in% AllSame schreiben.

%Vor%

oder verwenden Sie das Schlüsselwort params :

%Vor%

Dann kannst du einfach schreiben:

%Vor%     
Ben Voigt 14.11.2011, 01:28
quelle
4

Ich habe meine ursprüngliche Antwort so geändert, dass sie eine allgemeinere Methode enthält, die nicht auf LINQ- oder Erweiterungsmethoden basiert. Ich denke, man kann davon ausgehen, dass diese Methode leistungsfähiger ist, da sie nicht die gesamte Liste auflisten muss, um die Eindeutigkeit zu bestimmen, wenn es Werte gibt, die sich zu einem frühen Zeitpunkt in der Liste unterscheiden.

%Vor%     
Wil P 14.11.2011 01:56
quelle
3

Das scheint mir gut zu sein. Der einzige Kommentar, den ich habe, ist, dass Sie eine "erklärende Variable" für die Gleichung einführen sollten. Neben der Erläuterung der Berechnung bietet die Rückgabe jetzt einen schönen Ort für einen Haltepunkt oder einen Trace-Punkt, wenn das Ergebnis überprüft wird.

%Vor%     
Ritch Melton 14.11.2011 01:30
quelle
0

Wenn Sie nur nach Eleganz suchen (in Anbetracht Ihrer bereits haben eine Lösung, die nichts falsch daran hat), könnten Sie mit guten LINQ gehen. Dies kann drei oder mehr behandeln.

%Vor%     
parapura rajkumar 14.11.2011 01:33
quelle
0
%Vor%     
Lee Alcorn 07.03.2015 16:00
quelle
0

Mit LINQ wäre es am besten, uns Any() . Warum Any() anstelle von All() ist, weil All() das Prädikat für alle Elemente der Sammlung testet, während Any() beendet wird, sobald das Objekt mit dem Prädikat übereinstimmt.

Hier verwende ich einen umgekehrten Check. Ich suche nach jedem Gegenstand, der anders als der Gegenstand "a" sein wird. So bald es einen Unterschied findet, wissen wir, dass sie nicht alle gleich sind, so dass sie austreten und wieder wahr werden. Es werden also nur die Elemente "b", "c" und "d" getestet.

%Vor%

Wenn Sie "gleich" überschreiben, können Sie daraus generische Erweiterungen erstellen, die wiederverwendbar sind und für mehrere Typen arbeiten können, solange sie IEqualityComparer<T>

implementieren     
Franck 12.02.2018 16:41
quelle

Tags und Links