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 9 | Jako návrh |
Příčina
Toto pravidlo vyhledá výrazy zřetězení řetězců, které obsahují Substring volání, a navrhne nahrazení AsSpan Substring 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í:
- Nahrazení zřetězení řetězce voláním
string.Concat
a - Nahraďte volání voláním
Substring
naAsSpan
adresu .
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í Substring
AsSpan
, pokud extrahovaný podřetětěr předává pouze metodě s ekvivalentem založeným na rozsahu.