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