CA1834: Pro řetězce s jedním znakem použijte StringBuilder.Append(char)

Vlastnost Hodnota
ID pravidla CA1834
Název Pro jednoznakové řetězce používat metodu StringBuilder.Append(char)
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Toto pravidlo se aktivuje, když je metodě Append předán řetězec s délkou jednotky.

Popis pravidla

Při volání StringBuilder.Append s řetězcem délky jednotek zvažte použití const char namísto délky const string jednotky ke zlepšení výkonu.

Jak opravit porušení

Porušení může být buď opraveno ručně, nebo v některých případech pomocí rychlých akcí opravit kód v sadě Visual Studio. Příklady:

Příklad 1

Vyvolání StringBuilder.Append s řetězcovým literálem o délce jedné jednotky:

using System;
using System.Text;

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

Tip

Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Pokud ho chcete použít, umístěte kurzor na chybu a stiskněte Ctrl. (tečka). Vyberte Zvážit použití 'StringBuilder.Append(char)', pokud je to možné. ze seznamu zobrazených možností.

Oprava kódu pro CA1834 – Použití StringBuilder.Append(char) pro řetězce s jedním znakem

Oprava použitá sadou Visual Studio:

using System;
using System.Text;

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

V některých případech, například když se používá pole třídy s jednotkovou délkou const string, není v aplikaci Visual Studio navržena oprava (ale analyzátor se stále aktivuje). Tyto instance vyžadují ruční opravu.

Příklad 2

Vyvolání StringBuilder.Append třídního pole o délce const string jednotky:

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

Po pečlivé analýze lze unitString změnit na char bez způsobení jakýchkoli chyb sestavení.

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

Kdy potlačit upozornění

Je bezpečné potlačit porušení tohoto pravidla, pokud vás nezajímá zlepšení výkonu při použití StringBuilder.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také