CA1834: Użyj ciąguBuilder.Append(char) dla ciągów jednoznakowych

Właściwości Wartość
Identyfikator reguły CA1834
Tytuł Użyj StringBuilder.Append(char) dla ciągów z pojedynczym znakiem
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Ta reguła jest uruchamiana, gdy ciąg długości jednostki jest przekazywany do Append metody .

Opis reguły

Podczas wywoływania StringBuilder.Append za pomocą ciągu długości jednostki rozważ użycie const char zamiast długości const string jednostki w celu zwiększenia wydajności.

Jak naprawić naruszenia

Naruszenie można naprawić ręcznie lub, w niektórych przypadkach, za pomocą szybkich akcji w celu naprawienia kodu w programie Visual Studio. Przykłady:

Przykład 1

Wywołania elementu StringBuilder.Append z literałem ciągu długości jednostki:

using System;
using System.Text;

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

Napiwek

Poprawka kodu jest dostępna dla tej reguły w programie Visual Studio. Aby go użyć, umieść kursor na naruszeniu i naciśnij klawisze Ctrl+. (kropka). Wybierz pozycję Rozważ użycie opcji "StringBuilder.Append(char)", jeśli ma to zastosowanie. Z listy przedstawionych opcji.

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

Poprawka zastosowana przez program Visual Studio:

using System;
using System.Text;

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

W niektórych przypadkach, na przykład w przypadku używania pola klasy długości const string jednostki poprawka kodu nie jest sugerowana przez program Visual Studio (ale analizator nadal jest uruchamiany). Te wystąpienia wymagają ręcznej poprawki.

Przykład 2

Wywołania StringBuilder.Append obiektu z polem const string klasy o długości jednostki:

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 starannej analizie unitString można zmienić element na bez char powodowania błędów kompilacji.

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie martwisz się o poprawę wydajności podczas korzystania z usługi StringBuilder.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też