CA1845: スパンベースの 'string.Concat' を使用します

プロパティ
ルール ID CA1845
Title スパンベースの 'string.Concat' を使用する
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

この規則は、Substring 呼び出しを含む文字列連結式を検索し、SubstringAsSpan に置き換え、String.Concat のスパンベースのオーバーロードを使用するように提案します。

規則の説明

Substring を呼び出すことによって、抽出された substring のコピーが生成されます。 Substring の代わりに AsSpan を使用し、スパンを受け入れる string.Concat のオーバーロードを呼び出すことによって、不要な文字列割り当てを排除できます。

違反の修正方法

違反を修正するには:

  1. 文字列の連結を string.Concat の呼び出しに置き換えて、
  2. Substring の呼び出しを、AsSpan の呼び出しに置き換えます。

次のコード スニペットは、違反の例とその修正方法を示しています。

using System;

class Example
{
    public void Method()
    {
        string text = "fwobz the fwutzle";

        //  Violation: allocations by Substring are wasteful.
        string s1 = text.Substring(10) + "---" + text.Substring(0, 5);

        //  Fixed: using AsSpan avoids allocations of temporary strings.
        string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
    }
}

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

この規則による警告を抑制しないでください。 抽出された substring がスパンベースの同等のメソッドにのみ渡される場合は、AsSpan よりも Substring を使用する理由はありません。

関連項目