CA1307:意味を明確にするための StringComparison の指定

ルール ID CA1307
カテゴリ グローバリゼーション
修正が中断ありか中断なしか なし

原因

文字列比較演算で、StringComparison パラメーターを設定しないメソッド オーバーロードが使用されています。

規則の説明

多くの文字列比較操作には、StringComparison 列挙値をパラメーターとして受け入れるオーバーロードが用意されています。

StringComparison パラメーターを受け取るオーバーロードが存在する場合は常に、このパラメーターを受け取らないオーバーロードの代わりに使用する必要があります。 このパラメーターを明示的に設定することにより、コードを明確にし、保守しやすくすることができます。 詳細については、「文字列比較の明示的な指定」を参照してください。

注意

この規則では、比較メソッドで使用される既定値 StringComparison は考慮されません。 したがって、既定で Ordinal 文字列比較を使用するメソッドや、この既定の比較モードを意図的に使用するユーザーにとって、ノイズが多いと感じさせる可能性があります。 既定でカルチャ固有の文字列比較を使用する既知の文字列メソッドにのみ、違反を表示させる場合は、「CA1310: 正確さのために StringComparison を指定する」を使用してください。

違反の修正方法

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

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

意図を明確にする必要がない場合は、この規則による警告を抑制しても問題ありません。 たとえば、テスト コードまたはローカライズ不可能なコードでは必要がない場合があります。

警告を抑制する

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

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

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

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

規則のこのカテゴリ全体を無効にするには、構成ファイルでカテゴリの重要度を none に設定します。

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Globalization.severity = none

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

関連項目