CA1834: Använd StringBuilder.Append(char) för strängar med ett tecken
Property | Värde |
---|---|
Regel-ID | CA1834 |
Title | Använd StringBuilder.Append(char) för enteckensträngar |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Den här regeln utlöses när en enhetslängdssträng skickas Append till metoden.
Regelbeskrivning
När du anropar StringBuilder.Append
med en enhetslängdssträng bör du överväga att använda en const char
i stället för en enhetslängd const string
för att förbättra prestandan.
Så här åtgärdar du överträdelser
Överträdelsen kan antingen åtgärdas manuellt eller i vissa fall med hjälp av snabbåtgärder för att åtgärda kod i Visual Studio. Exempel:
Exempel 1
Anrop av StringBuilder.Append
med en strängliteral av enhetslängd:
using System;
using System.Text;
namespace TestNamespace
{
class TestClass
{
private void TestMethod()
{
StringBuilder sb = new StringBuilder();
sb.Append("a");
}
}
}
Dricks
En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på överträdelsen och trycker på Ctrl+. (punkt). Välj Överväg att använda "StringBuilder.Append(char)" när det är tillämpligt. I listan över alternativ som visas.
Korrigering som tillämpas av Visual Studio:
using System;
using System.Text;
namespace TestNamespace
{
class TestClass
{
private void TestMethod()
{
StringBuilder sb = new StringBuilder();
sb.Append('a');
}
}
}
I vissa fall, till exempel när du använder ett klassfält för enhetslängd const string
, föreslås ingen kodkorrigering av Visual Studio (men analysatorn utlöses fortfarande). Dessa instanser kräver en manuell korrigering.
Exempel 2
Anrop av StringBuilder.Append
med ett const string
klassfält med enhetslängd:
using System;
using System.Text;
namespace TestNamespace
{
public class Program
{
public const string unitString = "a";
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append(unitString);
}
}
}
Efter noggrann analys unitString
kan du ändra till en char
utan att orsaka några byggfel.
using System;
using System.Text;
namespace TestNamespace
{
public class Program
{
public const char unitString = 'a';
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append(unitString);
}
}
}
När du ska ignorera varningar
Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om att förbättra prestandan när du använder StringBuilder
.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1834
// The code that's violating the rule is on this line.
#pragma warning restore CA1834
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1834.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.