CA1834: StringBuilder.Append(char) gebruiken voor tekenreeksen met één teken

Eigenschap Waarde
Regel-id CA1834
Titel StringBuilder.Append(char) gebruiken voor tekenreeksen met één teken
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Deze regel wordt uitgevoerd wanneer een string die de lengte van een eenheid representeert wordt doorgegeven aan de Append methode.

Beschrijving van regel

Bij het aanroepen StringBuilder.Append met een tekenreeks voor eenheidlengte kunt u overwegen een const char in plaats van een eenheidslengte const string te gebruiken om de prestaties te verbeteren.

Hoe schendingen op te lossen

De schending kan handmatig worden opgelost, of in sommige gevallen met snelle acties om code in Visual Studio op te lossen. Voorbeelden:

Voorbeeld 1

Aanroepen van StringBuilder.Append met een letterlijke tekenreeks van lengte één:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("a");
        }
    }
}

Tip

Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Om het te gebruiken, plaatst u de cursor op de overtreding en drukt u op Ctrl+. (punt). Kies Overweeg het gebruik van 'StringBuilder.Append(char)' indien van toepassing. In de lijst met opties die worden weergegeven.

Codefix voor CA1834 - StringBuilder.Append(char) gebruiken voor tekenreeksen met één teken

Oplossing toegepast door Visual Studio:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append('a');
        }
    }
}

In sommige gevallen, bijvoorbeeld bij het gebruik van een veld in de lengteklasse voor eenheden, wordt een code-fix niet voorgesteld door Visual Studio (maar de analyzer wordt nog steeds geactiveerd). Voor deze exemplaren is een handmatige oplossing vereist.

Voorbeeld 2

Aanroepen van StringBuilder.Append met een const string klasseveld van eenheidslengte:

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);
        }
    }
}

Na zorgvuldige analyse kan unitString hier worden veranderd in een char zonder dat er buildfouten ontstaan.

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);
        }
    }
}

Wanneer waarschuwingen onderdrukken

Het is veilig om een schending van deze regel te onderdrukken als u zich geen zorgen maakt over het verbeteren van de prestaties bij gebruik StringBuilder.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA1834
// The code that's violating the rule is on this line.
#pragma warning restore CA1834

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA1834.severity = none

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook