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 サイトの他の関連記事を参照してください。