CA1845:請使用範圍型的 'string.Concat'

屬性
規則識別碼 CA1845
標題 使用以範圍為基礎的 'string。Concat'
類別 效能
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

此規則會找出包含 Substring 呼叫的字串串連運算式,並建議使用 的 span 型多載 String.Concat 取代 SubstringAsSpan

檔案描述

呼叫 Substring 會產生擷取子字串的複本。 藉由使用 AsSpanSubstring 而不是 呼叫 接受範圍的 多載 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));
    }
}

隱藏警告的時機

請勿隱藏來自此規則的警告。 當擷取的子字串只傳遞至具有範圍型對等專案的方法時,沒有理由使用 SubstringAsSpan

另請參閱