Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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
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.