ホームページ >バックエンド開発 >C++ >C# で「x.Username.Equals()」を使用すると大文字と小文字を区別しない文字列比較が失敗するのはなぜですか?

C# で「x.Username.Equals()」を使用すると大文字と小文字を区別しない文字列比較が失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-19 12:51:10168ブラウズ

Why Does Case-Insensitive String Comparison Fail in C# Using `x.Username.Equals()`?

C# での大文字と小文字を区別しない文字列比較のトラブルシューティング

C# 開発における一般的な落とし穴には、大文字と小文字を区別しない文字列比較の実行が含まれます。 x.Username.Equals() は適切であるように見えますが、大文字と小文字の区別が明示的に処理されていない場合、予期しない結果が生じる可能性があります。

最初のアプローチ x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)) は一見正しいように見えますが、より大きなコンテキスト内では必ずしも期待どおりに機能するとは限りません。

この問題は、Equals などの LINQ 式内で FindIndex を使用するときに発生します。問題は、メソッドによる null 値の暗黙的な処理にあります。

正しいアプローチ

解決策は、String.Equals を直接使用して、適切な null 処理と大文字と小文字を区別しない比較を確保することです。

<code class="language-csharp">drUser["Enrolled"] = (enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));</code>

この改訂されたコードは、静的 String.Equals メソッドを明示的に呼び出します。これにより、x.Username または (string)drUser["Username"] の潜在的な null 値が正しく処理されます。

推奨されるベストプラクティス

堅牢かつ効率的な文字列操作の場合:

  • 比較: 等価性チェックには String.Equals オーバーロードを使用し、大文字と小文字を区別しない比較には StringComparison.OrdinalIgnoreCase を指定します。
  • 並べ替え: 文字列の並べ替え操作には String.Compare または String.CompareTo を使用します。 これらの方法により、タスクの並べ替えの制御と効率が向上します。

実装例

次のコード スニペットは、推奨されるベスト プラクティスを示しています。

<code class="language-csharp">drUser["Enrolled"] = enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase));</code>

これらのガイドラインに従うことで、開発者はよくある落とし穴を回避し、C# アプリケーションで大文字と小文字を区別せずに正確かつ効率的に文字列比較を行うことができます。

以上がC# で「x.Username.Equals()」を使用すると大文字と小文字を区別しない文字列比較が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。