3

重複の可能性:
StringComparison.OrdinalIgnoreCase と StringComparison.InvariantCultureIgnoreCase のどちらを使用するのが一般的に最適ですか?

String.Equals(string a, string b, StringComparison comparisonType) を使用し、'a' と 'b' の大文字と小文字を区別しない場合、使用する適切な StringComparison は何ですか? つまり、StringComparison.CurrentCultureIgnoreCase、StringComparison.InvariantCultureIgnoreCase、および StringComparison.OrdinalIgnoreCase の違いは何ですか? また、それぞれが String.Equals の使用にどのように影響するのでしょうか?

4

1 に答える 1

3

問題は、小文字の大文字バージョンがすべての言語で同じではないということです。たとえば、"u" の大文字は、en-us では "U" ですが、他の文化では別のものである可能性があります。

たとえば、これを試してください:

        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();

そのため、現在のスレッドのカルチャにそのような文字を含む文字列が入力されている場合、インバリアント カルチャを使用すると間違った結果が生じる可能性があります。したがって、比較する文字列が現在のカルチャで入力されており、その方法でも比較する必要があることが確実な場合は、CurrentCultureIgnoreCase を使用します。

于 2009-06-11T20:31:17.023 に答える