CA1847: String.Contains(string) の代わりに String.Contains(char) を 1 文字で使用する

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

原因

String.Contains(string) は、使用可能な場合に String.Contains(char) 使用されます。

規則の説明

1 文字を検索する場合、 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

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

関連項目