461 Stimmen

Vergleich zweier Zeichenketten, ohne Berücksichtigung der Groß-/Kleinschreibung in C#

Welche der beiden folgenden Möglichkeiten ist effizienter? (Oder gibt es vielleicht eine dritte Option, die noch besser ist?)

string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

O

if (val.ToLowerCase() == "astringvalue")

?

438voto

Sven Punkte 20703

Wenn Sie auf Effizienz Wert legen, verwenden Sie diese:

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)

Ordinale Vergleiche können deutlich schneller sein als kulturbezogene Vergleiche.

ToLowerCase kann jedoch die bessere Option sein, wenn Sie viele Vergleiche mit der gleichen Zeichenfolge durchführen.

Wie bei jeder Leistungsoptimierung: Messen Sie es, und entscheiden Sie dann!

221voto

Frederik Gheysels Punkte 54908

Die erste Lösung ist die richtige und IMHO auch die effizientere, da die zweite "Lösung" eine neue String-Instanz instanziiert.

52voto

Marc Gravell Punkte 970173

En .ToLowerCase Version wird nicht schneller sein - sie erfordert eine zusätzliche String-Zuweisung (die später wieder eingesammelt werden muss), usw.

Ich persönlich würde Folgendes verwenden

string.Equals(val, "astringvalue",  StringComparison.OrdinalIgnoreCase)

Dies vermeidet alle Probleme mit kultursensiblen Zeichenketten, hat aber zur Folge, dass es vermeidet alle Probleme mit kultursensiblen Zeichenketten . Nur Sie wissen, ob das in Ihrem Kontext in Ordnung ist.

Die Verwendung des string.Equals statische Methode vermeidet alle Probleme mit val unter null .

14voto

Jamie Dixon Punkte 51361

Meine allgemeine Antwort auf diese Art von Fragen zur "Effizienz" lautet fast immer, dass die Version des Codes, die am besten lesbar ist, auch die effizienteste ist.

Ich denke jedoch, dass (val.ToLowerCase() == "astringvalue") ist für die meisten Menschen auf den ersten Blick recht verständlich.

Die Effizienz, auf die ich mich beziehe, liegt nicht unbedingt in der Ausführung des Codes, sondern eher in der Pflege und allgemeinen Lesbarkeit des betreffenden Codes.

9voto

spender Punkte 111351

Am sichersten ist es wohl, wenn Sie String.Equals um die Möglichkeit abzuschwächen, dass Val null .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X