CA1834: Verwenden von StringBuilder.Append(char) für Zeichenfolgen mit einem einzelnen Zeichen

Eigenschaft Wert
Regel-ID CA1834
Titel Verwenden von StringBuilder.Append(char) für Zeichenfolgen mit einem einzelnen Zeichen
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Vorschlag

Ursache

Diese Regel wird ausgelöst, wenn eine Zeichenfolge der Einheitslänge an die Append-Methode übermittelt wird.

Regelbeschreibung

Wenn Sie StringBuilder.Append mit einer Zeichenfolge der Einheitslänge aufrufen, empfiehlt es sich, const char anstelle einer const string der Einheitslänge zu verwenden, um die Leistung zu verbessern.

Behandeln von Verstößen

Der Verstoß kann entweder manuell behoben werden oder in einigen Fällen schnelle Aktionen zum Beheben von Code in Visual Studio verwenden. Beispiele:

Beispiel 1

Aufrufe von StringBuilder.Append mit einem Zeichenfolgenliteral der Einheitslänge:

using System;
using System.Text;

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

Tipp

Für diese Regel ist ein Codefix in Visual Studio verfügbar. Um ihn zu nutzen, muss der Cursor auf dem Verstoß platziert und STRG+. (Punkt) gedrückt werden. Wählen Sie aus der Liste der angezeigten Optionen Verwendung von „StringBuilder.Append(char)“ erwägen, falls angebracht aus.

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

Von Visual Studio angewendete Korrektur:

using System;
using System.Text;

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

In einigen Fällen, z. b. bei Verwendung eines const string-Klassenfelds mit Einheitslänge, wird von Visual Studio kein Codefix vorgeschlagen (aber das Analysetool wird weiterhin ausgelöst). Diese Instanzen erfordern eine manuelle Behebung.

Beispiel 2

Aufrufe von StringBuilder.Append mit einem const string-Klassenfeld der Einheitslänge:

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

Nach der sorgfältigen Analyse kann unitString hier zu char geändert werden, ohne dass Buildfehler entstehen.

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

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, einen Verstoß gegen diese Regel zu unterdrücken, wenn Sie sich keine Gedanken über die Verbesserung der Leistung machen, wenn Sie StringBuilder verwenden.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch