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