CA1863: Usar 'CompositeFormat'
Propriedade | Valor |
---|---|
ID da regra | CA1863 |
Título | Use CompositeFormat . |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Chamadas de código String.Format(String, Object[]) ou StringBuilder.AppendFormat(String, Object[]) com uma static
cadeia de caracteres de formato que não foi armazenada em cache em uma instância CompositeFormat.
Descrição da regra
É caro analisar uma cadeia de caracteres de formato em tempo de execução. Essa regra localiza locais em seu código em que você pode armazenar em cache e usar uma instância CompositeFormat como argumento para uma operação de formatação, em vez de passar a cadeia de caracteres de formato original. Uma instância CompositeFormat analisa a cadeia de caracteres de formato composto quando é criada, o que significa que o "caminho crítico" da formatação de cadeia de caracteres pode ser executado muito mais rapidamente.
Como corrigir violações
Crie uma instância de CompositeFormat chamando CompositeFormat.Parse(String) e passe-a para String.Format(IFormatProvider, CompositeFormat, Object[]) ou StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) em vez da cadeia de caracteres de formato original.
Exemplo
O exemplo a seguir mostra duas violações da regra:
class C
{
private static readonly string StaticField = "Format one value: {0}";
static void Main()
{
_ = string.Format(StaticField, 42);
StringBuilder sb = new();
sb.AppendFormat(StaticField, 42);
}
}
O exemplo a seguir mostra o código que corrige ambas as violações:
class C
{
private static readonly CompositeFormat StaticField = CompositeFormat.Parse("Format one value: {0}");
static void Main()
{
_ = string.Format(null, StaticField, 42);
StringBuilder sb = new();
sb.AppendFormat(null, StaticField, 42);
}
}
Quando suprimir avisos
É seguro suprimir um diagnóstico dessa regra se o desempenho não é uma preocupação.
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 CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863
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.CA1863.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.