CA1845: Usar 'string.Concat' com base em span
Property | Valor |
---|---|
ID da regra | CA1845 |
Título | Use a "string.Concat" baseada em intervalo. |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Essa regra localiza expressões de concatenação de cadeia de caracteres que contêm chamadas Substring e sugere substituir Substring por AsSpan e usar a sobrecarga baseada em span de String.Concat.
Descrição da regra
Chamar Substring
produz uma cópia do substring extraído. Ao usar AsSpan
em vez de Substring
e chamar a sobrecarga de string.Concat
que aceita intervalos, você pode eliminar a alocação desnecessária de cadeia de caracteres.
Como corrigir violações
Para corrigir violações:
- Substitua a concatenação de cadeia de caracteres por uma chamada para
string.Concat
, e - Substitua chamadas para
Substring
por chamadas paraAsSpan
.
O snippet de código a seguir mostra exemplos de violações e como corrigi-las.
using System;
class Example
{
public void Method()
{
string text = "fwobz the fwutzle";
// Violation: allocations by Substring are wasteful.
string s1 = text.Substring(10) + "---" + text.Substring(0, 5);
// Fixed: using AsSpan avoids allocations of temporary strings.
string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
}
}
Quando suprimir avisos
Não suprima avisos dessa regra. Não há motivo para usar Substring
em vez de AsSpan
quando o substring extraído está sendo passado apenas para um método com um equivalente baseado em span.