CA1863: Use 'CompositeFormat'
Propriedade | valor |
---|---|
ID da regra | CA1863 |
Cargo | Utilizar o comando CompositeFormat |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Chamadas String.Format(String, Object[]) de código ou StringBuilder.AppendFormat(String, Object[]) com uma static
cadeia de caracteres de formato que não foi armazenada em cache em uma CompositeFormat instância.
Descrição da regra
É caro analisar uma cadeia de caracteres de formato em tempo de execução. Esta regra localiza locais no código onde você pode armazenar em cache e usar uma instância como argumento para uma CompositeFormat operação de formatação, em vez de passar a cadeia de caracteres do formato original. Uma CompositeFormat instância analisa a cadeia de caracteres de formato composto quando ela é criada, o que significa que o "caminho quente" da formatação da cadeia de caracteres pode ser executado muito mais rapidamente.
Como corrigir violações
Crie uma instância de chamando CompositeFormat.Parse(String) e passando-a para String.Format(IFormatProvider, CompositeFormat, Object[]) ou StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) em vez da cadeia de caracteres de CompositeFormat 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 diagnósticos dessa regra se o desempenho não for uma preocupação.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.