248

下の行で大文字と小文字を区別しないようにするにはどうすればよいですか?

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

私は今日、私が使用することを提案するいくつかのアドバイスを与えられました:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

問題は、これを機能させることができないことです。以下の行を試しました。これはコンパイルされますが、間違った結果を返します。登録済みのユーザーは未登録として、未登録のユーザーは登録済みとして返されます。

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], 
                                 StringComparison.OrdinalIgnoreCase)));

誰かが問題を指摘できますか?

4

9 に答える 9

448

これは、.NET フレームワーク (4 & +) で同等性をチェックするためのベスト プラクティスではありません。

String.Compare(x.Username, (string)drUser["Username"], 
                  StringComparison.OrdinalIgnoreCase) == 0

代わりに以下を使用してください

String.Equals(x.Username, (string)drUser["Username"], 
                   StringComparison.OrdinalIgnoreCase) 

MSDN は次のことを推奨しています。

  • String.Equals メソッドのオーバーロードを使用して、2 つの文字列が等しいかどうかをテストします。
  • String.CompareおよびString.CompareTo メソッドを使用して文字列を並べ替えます。同等性をチェックするのではありません
于 2012-12-20T04:40:52.723 に答える
38

次のような静的String.Compare関数を使用する必要があります

x => String.Compare (x.Username, (string)drUser["Username"],
                     StringComparison.OrdinalIgnoreCase) == 0
于 2010-06-25T23:05:30.417 に答える
35

比較のためにこれを使用してください:

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
于 2016-02-17T04:57:15.360 に答える
7

System.String大文字と小文字を区別しない比較拡張メソッドを提供するために拡張できます (議論はありますが) 。

public static bool CIEquals(this String a, String b) {
    return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}

そしてそのまま使用します:

x.Username.CIEquals((string)drUser["Username"]);

C# を使用すると、プロジェクトで構文糖として機能する拡張メソッドを作成できます。これは非常に便利です。

それは答えではなく、この質問は古くて解決済みであることを知っています。これらのビットを追加したかっただけです。

于 2017-07-17T15:07:57.280 に答える
3

詳細については、次のリンクを参照してください。

http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/

String クラスの Compare 静的メソッドを使用して、2 つの文字列を比較します。比較で大文字と小文字が区別されないかどうかは、いずれかのオーバーロードの 3 番目のパラメーターによって決まります。例えば:

string lowerCase = "abc";
string upperCase = "AbC";
int caseInsensitiveResult = string.Compare(lowerCase, upperCase,
  StringComparison.CurrentCultureIgnoreCase);
int caseSensitiveResult = string.Compare(lowerCase,
  StringComparison.CurrentCulture);

caseSensitiveResult 値は -1 (lowerCase が upperCase より「小さい」ことを示す) であり、caseInsensitiveResult は 0 (lowerCase が upperCase と「等しい」ことを示す) です。

于 2016-11-21T00:33:09.237 に答える
1

StringComparison.CurrentCultureIgnoreCase代わりに使ってみませんか?

于 2010-06-25T23:00:14.533 に答える
-12

いつでも関数を使用できます: .ToLower(); .ToUpper();

文字列を変換してから比較します...

幸運を

于 2014-07-31T11:45:29.797 に答える