CA1845: Použijte 'string.Concat' na základě rozpětí.

Vlastnost Hodnota
ID pravidla CA1845
Název Použijte řetězec založený na úseku 'string.Concat'.
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Toto pravidlo vyhledá výrazy zřetězení řetězců, které obsahují Substring volání, a navrhne nahradit Substring s AsSpan a použít přetížení určené rozsahem String.Concat.

Popis pravidla

Volání Substring vytvoří kopii extrahovaného podřetězce. Použitím AsSpan místo Substring a zavoláním přetížení string.Concat, které přijímá rozsahy, můžete eliminovat zbytečné přidělování řetězců.

Jak opravit porušení

Oprava porušení:

  1. Nahraďte zřetězení řetězce voláním string.Concat.
  2. Nahraďte volání kódem Substring voláním kód AsSpan.

Následující fragment kódu ukazuje příklady porušení a postup jejich opravy.

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));
    }
}

Kdy potlačit upozornění

Neignorujte upozornění z tohoto pravidla. Neexistuje důvod k použití Substring nad AsSpan, pokud se extrahovaný podřetězec pouze předává metodě s na rozsahu založeným ekvivalentem.

Viz také