Share via


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 8 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.

Code fix for CA1834 - Use StringBuilder.Append(char) for single character strings

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.

Se även