Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.