Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA1863 |
| Título | Utilizar o comando CompositeFormat |
| Categoria | Desempenho |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Não |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
Chamadas String.Format(String, Object[]) ou StringBuilder.AppendFormat(String, Object[]) com uma cadeia de caracteres de formato static que não foi cacheada em uma instância CompositeFormat.
Descrição da regra
É caro analisar uma string de formato em tempo de execução. Esta regra localiza locais no código onde pode-se armazenar em cache e usar um exemplo de CompositeFormat como argumento para uma operação de formatação, em vez de passar a string de 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 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 os diagnósticos desta regra caso o desempenho não seja 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.