171

以下は大文字と小文字が区別されることを知っています。

if (StringA == StringB) {

では、2 つの文字列を無差別に比較する演算子はありますか?

4

14 に答える 14

306

これを試して:

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
于 2009-03-10T16:54:31.480 に答える
44

文字の大文字と小文字を無視して 2 つの文字列を比較する最良の方法は、大文字と小文字を区別しない序数文字列比較を指定するString.Equals静的メソッドを使用することです。これは最速の方法でもあり、文字列を小文字または大文字に変換してから比較するよりもはるかに高速です。

両方のアプローチのパフォーマンスをテストしたところ、大文字と小文字を区別しない序数の文字列比較は9 倍以上高速でした。また、文字列を小文字または大文字に変換するよりも信頼性が高くなります (Turkish i problem を確認してください)。そのため、常にString.Equalsメソッドを使用して、文字列が等しいかどうかを比較します。

String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase);

カルチャ固有の文字列比較を実行する場合は、次のコードを使用できます。

String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);

2 番目の例では、現在のカルチャの文字列比較ロジックを使用しているため、最初の例の「序数を無視する」比較よりも遅くなることに注意してください。そのため、カルチャ固有の文字列比較ロジックが必要なく、最大のパフォーマンスの後、「序数無視ケース」比較を使用します。

詳細については、私のブログで全文をお読みください

于 2012-09-10T10:17:04.523 に答える
20

StringComparer静的クラスには、大文字と小文字を区別する任意のタイプの比較子を返す多くのプロパティがあります。

StringComparerプロパティ

たとえば、次のように呼び出すことができます。

StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)

また

StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)

引数を取るstring.Equalsorオーバーロードよりも少しきれいです。string.CompareStringComparison

于 2009-03-10T19:09:23.483 に答える
14
System.Collections.CaseInsensitiveComparer

また

System.StringComparer.OrdinalIgnoreCase
于 2009-03-10T16:54:40.920 に答える
9
string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase);
于 2009-03-10T16:55:27.797 に答える
8

また

if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) {

ただし、StringA が null でないことを確認する必要があります。したがって、おそらく使用する方が良いでしょう:

string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase);

ジョンが提案したように

編集:バグを修正しました

于 2009-03-10T16:56:45.517 に答える
4

使用できます

if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase))
于 2009-03-10T16:56:01.947 に答える
3

オペレーター?いいえ、文字列比較で大文字と小文字が区別されないように文化を変更できると思います。

// you'll want to change this...
System.Threading.Thread.CurrentThread.CurrentCulture
// and you'll want to custimize this
System.Globalization.CultureInfo.CompareInfo

文字列が equals 演算子によって比較される方法が変わると確信しています。

于 2009-03-10T16:55:11.183 に答える
1

私は、これらの比較方法の最後に次のように入力することに慣れています。, StringComparison.

ということでエクステンションを作りました。

namespace System
{   public static class StringExtension
    {
        public static bool Equals(this string thisString, string compareString,
             StringComparison stringComparison)
        {
            return string.Equals(thisString, compareString, stringComparison);
        }
    }
}

thisStringext を呼び出す前に、null をチェックする必要があることに注意してください。

于 2012-07-24T02:29:46.607 に答える
0
if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) {

ToUpperInvariant() は ToLowerInvariant() よりも高速であると報告されています。

于 2009-03-10T16:55:31.167 に答える
0
string.Compare(string1, string2, true)
于 2009-03-10T17:19:29.160 に答える