it-swarm.com.de

Zwei Zeichenfolgen vergleichen, Groß- / Kleinschreibung in C # ignorieren

Mögliches Duplikat:
Was ist der Unterschied zwischen verschiedenen Stringvergleichsmethoden?

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

string val = "AStringValue";

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

OR

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

?

285
Patrick

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

154

Wenn Sie nach Effizienz suchen, verwenden Sie diese:

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

Ordnungsvergleiche können erheblich schneller sein als kulturbewusste Vergleiche.

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

Wie bei jeder Leistungsoptimierung: Messen, dann entscheiden!

248
Sven

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

Persönlich würde ich verwenden

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

dies vermeidet alle Probleme mit kultursensitiven Zeichenfolgen, in der Folge jedoch vermeidet alle Probleme mit kultursensitiven Zeichenfolgen. Nur Sie wissen, ob das in Ihrem Kontext in Ordnung ist.

Mit der statischen Methode string.Equals werden Probleme vermieden, bei denen valnull ist.

29
Marc Gravell

Meine allgemeine Antwort auf diese Art von Frage zu "Effizienz" lautet fast immer: Welche Version des Codes am besten lesbar ist, ist die effizienteste.

Davon abgesehen denke ich, dass (val.ToLowerCase() == "astringvalue") für die meisten Menschen auf einen Blick ziemlich verständlich ist.

Die Effizienz, auf die ich mich beziehe, besteht nicht notwendigerweise in der Ausführung des Codes, sondern in der Wartung und allgemeinen Lesbarkeit des fraglichen Codes.

11
Jamie Dixon

Ich gehe davon aus, dass es am sichersten ist, String.Equals zu verwenden, um die Möglichkeit abzuschwächen, dass val null ist.

6
spender

Ersteres ist am schnellsten. Es stellt sich heraus, dass val unveränderlich ist, und daher wird mit String.ToLowerCase () ein neues String-Objekt erstellt und nicht nur ein direkter Vergleich mit dem String-Vergleicher. Das Erstellen eines neuen Zeichenfolgenobjekts kann sehr kostspielig sein, wenn Sie dies mehrmals pro Sekunde tun.

4
foxy

1st ist effizienter (und die bestmögliche Option), da val.ToLowerCase() ein neues Objekt erstellt, da Strings unveränderlich sind.

2
Грозный

vielleicht möchten Sie sich auch die bereits beantwortete Frage ansehen nterschiede in den Stringvergleichsmethoden in C #

2
Tomasz Jaskuλa