CA1845: スパンベースの 'string.Concat' を使用します
プロパティ | 値 |
---|---|
ルール ID | CA1845 |
Title | スパンベースの 'string.Concat' を使用する |
[カテゴリ] | パフォーマンス |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | 提案として |
原因
この規則は、Substring 呼び出しを含む文字列連結式を検索し、Substring を AsSpan に置き換え、String.Concat のスパンベースのオーバーロードを使用するように提案します。
規則の説明
Substring
を呼び出すことによって、抽出された substring のコピーが生成されます。 Substring
の代わりに AsSpan
を使用し、スパンを受け入れる string.Concat
のオーバーロードを呼び出すことによって、不要な文字列割り当てを排除できます。
違反の修正方法
違反を修正するには:
- 文字列の連結を
string.Concat
の呼び出しに置き換えて、 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
を使用する理由はありません。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET