CA1309:順序を示す StringComparison を使用します

プロパティ
ルール ID CA1309
Title 順序を示す StringComparison を使用します
[カテゴリ] グローバリゼーション
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

非言語的な文字列比較演算で、StringComparison パラメーターが Ordinal または OrdinalIgnoreCase に設定されていません。

規則の説明

多くの文字列操作 (最も重要なのは System.String.CompareSystem.String.Equals メソッド) で、System.StringComparison 列挙値をパラメーターとして受け入れるオーバーロードに対応するようになりました。

StringComparison.Ordinal または StringComparison.OrdinalIgnoreCase のいずれかを指定すると、文字列比較は非言語的になります。 つまり、比較する際に、自然言語に固有の特徴は無視されます。 自然言語の特徴が無視されるとは、大文字と小文字の指定や、カルチャでパラメーター化される同等の表ではなく、単純なバイト比較に基づいて判断されることを意味します。 結果として、パラメーターを StringComparison.Ordinal または StringComparison.OrdinalIgnoreCase に明示的に設定することによって、多くの場合、コードの速度、正確さ、および信頼性が向上します。

違反の修正方法

この規則違反を修正するには、パラメーターとして System.StringComparison 列挙型を受け入れるオーバーロードに文字列比較メソッドを変更し、Ordinal または OrdinalIgnoreCase のいずれかを指定します。 たとえば、String.Compare(str1, str2)String.Compare(str1, str2, StringComparison.Ordinal) に変更します。

どのようなときに警告を抑制するか

ライブラリまたはアプリケーションの対象がローカル ユーザーに限定されている場合、または現在のカルチャのセマンティクスを使用する必要がある場合は、この規則による警告を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1309
// The code that's violating the rule is on this line.
#pragma warning restore CA1309

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1309.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目