Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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í:
- Nahraďte zřetězení řetězce voláním
string.Concat. - Nahraďte volání kódem
Substringvoláním kódAsSpan.
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.