Compartilhar via


CA1834: usar StringBuilder.Append (char) para cadeias de caracteres únicas

Property Valor
ID da regra CA1834
Título usar StringBuilder.Append (char) para cadeias de caracteres únicas
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

Essa regra é acionada quando uma cadeia de caracteres de comprimento da unidade é passada para o método Append.

Descrição da regra

Ao chamar StringBuilder.Append com uma cadeia de comprimento de unidade, considere usar const char em vez de const string de comprimento da unidade para melhorar o desempenho.

Como corrigir violações

A violação pode ser corrigida manualmente ou, em alguns casos, usando Ações Rápidas para corrigir o código no Visual Studio. Exemplos:

Exemplo 1

Invocações de StringBuilder.Append com uma literal de cadeia de caracteres de comprimento da unidade:

using System;
using System.Text;

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

Dica

Uma correção de código está disponível para essa regra no Visual Studio. Para usá-la, posicione o cursor sobre a violação e pressione Ctrl+. (ponto). Escolha Considere usar 'StringBuilder.Append(char)' quando aplicável na lista de opções apresentadas.

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

Correção aplicada pelo Visual Studio:

using System;
using System.Text;

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

Em alguns casos, por exemplo, ao usar um campo de classe const string de comprimento de unidade, uma correção de código não será sugerida pelo Visual Studio (mas o analisador ainda será acionado). Essas instâncias exigem uma correção manual.

Exemplo 2

Invocações de StringBuilder.Append com um campo de classe const string de comprimento da unidade:

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

Após uma análise cuidadosa, unitString aqui poderá ser alterado para um char sem causar erros de build.

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

Quando suprimir avisos

É seguro suprimir uma violação dessa regra se você não estiver preocupado em melhorar o desempenho ao usar StringBuilder.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.

Confira também