Compartilhar via


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:

  1. Substitua a concatenação de cadeia de caracteres por uma chamada para string.Concat, e
  2. Substitua chamadas para Substring por chamadas para AsSpan.

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.

Confira também