86 Stimmen

Was stimmt nicht mit ToLowerInvariant()?

Ich habe die folgende Zeile Code:

var connectionString = configItems.
                Find(item => item.Name.ToLowerInvariant() == "connectionstring");

VS 2010 Code-Analyse sagt mir folgendes:

Warnung 7 CA1308 : Microsoft.Globalization : In der Methode ... ersetzen Sie den Aufruf von 'string.ToLowerInvariant()' durch String.ToUpperInvariant().

Heißt das, dass ToUpperInvariant() zuverlässiger ist?

122voto

TomTom Punkte 1

Google gibt einen Hinweis auf CA1308: Strings auf Großbuchstaben normalisieren

Es sagt:

Strings sollten auf Großbuchstaben normalisiert werden. Eine kleine Gruppe von Zeichen, wenn sie in Kleinbuchstaben umgewandelt werden, kann keinen Rundkurs machen. Einen Rundkurs machen bedeutet, die Zeichen von einer Sprache in eine andere Sprache umzuwandeln, die Zeichendaten anders darstellt, und anschließend die originalen Zeichen aus den umgewandelten Zeichen genau wiederherzustellen.

Also ja - ToUpper ist zuverlässiger als ToLower.

In Zukunft schlage ich vor, zuerst zu googeln - ich mache das für all diese FxCop-Warnungen, die herumfliegen ;) Es hilft viel, die entsprechende Dokumentation zu lesen ;)

25voto

Henri Punkte 5047

Abgesehen von dem, was TomTom sagt, ist .net für die Zeichenfolgenvergleiche in Großbuchstaben optimiert. Daher ist die Verwendung von UpperInvariant theoretisch schneller als LowerInvariant.

Dies wird tatsächlich in CLR via C# wie in den Kommentaren erwähnt. Ich bin mir jedoch nicht sicher, ob dies natürlich wirklich stimmt, da auf MSDN nichts zu diesem Thema zu finden ist. Der Zeichenfolgenvergleichsleitfaden auf MSDN erwähnt, dass ToUpperInvariant und ToLowerInvariant gleich sind und nicht den ersteren bevorzugen.

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