CA1845: Použijte řetězec založený na rozsahu. Concat'

Vlastnost Hodnota
ID pravidla CA1845
Název Použijte řetězec založený na rozsahu. Concat'
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Toto pravidlo vyhledá výrazy zřetězení řetězců, které obsahují Substring volání, a navrhne nahrazení AsSpanSubstring a použití přetížení založeného na rozsahu String.Concat.

Popis pravidla

Volání Substring vytvoří kopii extrahovaného podřetětěce. Když použijete AsSpan místo Substring přetížení, které přijímá rozsahy a voláte ho string.Concat , můžete eliminovat zbytečné přidělení řetězců.

Jak opravit porušení

Oprava porušení:

  1. Nahrazení zřetězení řetězce voláním string.Concata
  2. Nahraďte volání voláním Substring na AsSpanadresu .

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í

Nepotlačujte upozornění z tohoto pravidla. Neexistuje důvod k použití SubstringAsSpan , pokud extrahovaný podřetětěr předává pouze metodě s ekvivalentem založeným na rozsahu.

Viz také