CA1847: 単一の文字では、string.Contains(string) ではなく、string.Contains(char) を使用する

プロパティ
ルール ID CA1847
Title 単一の文字では、string.Contains(string) ではなく、string.Contains(char) を使用する
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

string.Contains(char) が利用できたときに string.Contains(string) が利用されています。

規則の説明

単一の文字を探すとき、string.Contains(char) を使用すると、string.Contains(string) よりパフォーマンスが良くなります。

違反の修正方法

一般的に、文字列リテラルではなく、文字リテラルを使用することでルールは修正されます。

public bool ContainsLetterI()
{
    var testString = "I am a test string.";
    return testString.Contains("I");
}
Public Function ContainsLetterI() As Boolean
    Dim testString As String = "I am a test string."
    Return testString.Contains("I")
End Function

このコードは文字リテラルを代わりに使用するように変更できます。

public bool ContainsLetterI()
{
    var testString = "I am a test string.";
    return testString.Contains('I');
}
Public Function ContainsLetterI() As Boolean
    Dim testString As String = "I am a test string."
    Return testString.Contains("I"c)
End Function

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

問題となっている検索呼び出しによるパフォーマンスへの影響が懸念されない場合は、この規則違反を抑制します。

警告を抑制する

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

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

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

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

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

関連項目