次の方法で共有


CA1865-CA1867: 文字列が 1 文字の場合は、'string.Method(string)' の代わりに 'string.Method(char)' を使用します

プロパティ
ルール ID CA1865-CA1867
Title 文字列が 1 文字の場合は、'string.Method(string)' の代わりに 'string.Method(char)' を使用します
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 CA1865 - 提案として
CA1866 - 提案として
CA1867 - なし

原因

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

これらのルールの string 上のターゲット メソッドは以下のとおりです。

  • StartsWith
  • EndsWith
  • IndexOf
  • LastIndexOf

以下の表は、関連する各ルール ID の条件をまとめたものです。

診断 ID 説明 クイック修正プログラムが入手可能です
CA1865 コード修正プログラムを使用して安全な変換が自動的に実行できる場合に適用されます。 はい
CA1866 指定された比較がない場合に適用されます。 いいえ
CA1867 他の 2 つのルールでカバーされていないその他の文字列比較に適用されます。 いいえ

CA1867 は既定で無効になっています。

規則の説明

char パラメーターを指定するオーバーロードは、文字列パラメーターを指定するオーバーロードよりもパフォーマンスが向上します。

違反の修正方法

違反を修正するには、文字列パラメーター オーバーロードの代わりに char パラメーター オーバーロードを使用します。

次に例を示します。

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

このコードは、文字列 "I" の代わりに 'I'StartsWith に渡すように変更できます。

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

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

文字列を使用するメソッドの呼び出しによるパフォーマンスへの影響が懸念されない場合は、この規則違反を抑制します。

警告を抑制する

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

#pragma warning disable CA1865 // or CA1866 or CA1867
// The code that's violating the rule is on this line.
#pragma warning restore CA1865 // or CA1866 or CA1867

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

[*.{cs,vb}]
dotnet_diagnostic.CA1865.severity = none
dotnet_diagnostic.CA1866.severity = none
dotnet_diagnostic.CA1867.severity = none

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

関連項目