CA1845: Använd span-baserad sträng. Concat'
Property | Värde |
---|---|
Regel-ID | CA1845 |
Title | Använd span-baserad sträng. Concat' |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Den här regeln letar upp strängsammanfogningsuttryck som innehåller Substring anrop och föreslår att du Substring ersätter med AsSpan och använder den spanbaserade överbelastningen av String.Concat.
Regelbeskrivning
Anrop Substring
skapar en kopia av den extraherade delsträngen. Genom att använda AsSpan
i stället för Substring
och anropa överbelastningen för string.Concat
som accepterar intervall kan du eliminera den onödiga strängallokeringen.
Så här åtgärdar du överträdelser
Så här åtgärdar du överträdelser:
- Ersätt strängsammanfogningen med ett anrop till
string.Concat
, och - Ersätt anrop till
Substring
med anrop tillAsSpan
.
Följande kodfragment visar exempel på överträdelser och hur du åtgärdar dem.
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));
}
}
När du ska ignorera varningar
Ignorera inte varningar från den här regeln. Det finns ingen anledning att använda Substring
över AsSpan
när den extraherade delsträngen endast skickas till en metod med en span-baserad motsvarighet.