3 Stimmen

Unterschied zwischen case-insensitive StringComparisons?

Mögliches Duplikat:
Was ist im Allgemeinen besser zu verwenden - StringComparison.OrdinalIgnoreCase oder StringComparison.InvariantCultureIgnoreCase?

Wenn ich String.Equals(string a, string b, StringComparison comparisonType) verwende und mich nicht um die Groß- und Kleinschreibung von 'a' und 'b' kümmere, was ist der richtige StringComparison, den ich verwenden muss? Mit anderen Worten, was ist der Unterschied zwischen StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase und StringComparison.OrdinalIgnoreCase, und wie wirkt sich jeder von ihnen auf die Verwendung von String.Equals aus?

4voto

Groo Punkte 47623

Die Sache ist die, dass die Großbuchstaben nicht in allen Sprachen gleich groß sind. Zum Beispiel ist die Großschreibung von "u" im Englischen "U", aber in einer anderen Kultur kann es etwas anderes sein.

Versuchen Sie zum Beispiel dies:

        CultureInfo english = new CultureInfo("en-US", false);
        CultureInfo turkish = new CultureInfo("tr-TR", false);

        foreach (String i in new String[] { "a", "e", "i", "o", "u" })
        {
            String iEng = i.ToUpper(english);
            String iTur = i.ToUpper(turkish);
            Console.Write(i); 
            Console.WriteLine(iEng == iTur ? " Equal" : " Not equal");
        }

        Console.ReadLine();

Wenn Sie also Zeichenketten haben, die in der Kultur des aktuellen Threads eingegeben wurden und solche Buchstaben enthalten, könnte die Verwendung der invarianten Kultur falsche Ergebnisse liefern. Daher würde ich CurrentCultureIgnoreCase verwenden, wenn Sie sicher sind, dass die verglichenen Zeichenfolgen in der aktuellen Kultur eingegeben wurden und auch so verglichen werden sollten.

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