Compartilhar via


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 10 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 runtime. 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.