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 způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Toto pravidlo se aktivuje při předání řetězce délky jednotky metodě Append .

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 délky 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 porušení a stiskněte ctrl+. (tečka). Pokud je to možné, zvolte Možnost Zvážit použití StringBuilder.Append(char). V seznamu zobrazených možností.

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

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 při použití pole třídy délky const string jednotek není v sadě Visual Studio navržena oprava kódu (ale analyzátor se stále aktivuje). Tyto instance vyžadují ruční opravu.

Příklad 2

Vyvolání StringBuilder.Append pole třídy s délkou 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 je možné tento postup unitString změnit na bez char 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é