CA1845: uso de 'string.Concat' basado en Span

Propiedad Value
Identificador de la regla CA1845
Título Uso de 'string.Concat' basado en Span
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Esta regla busca expresiones de concatenación de cadenas que contienen llamadas a Substring y sugiere reemplazar Substring por AsSpan y usar la sobrecarga basada en intervalos de String.Concat.

Descripción de la regla

La llamada a Substring genera una copia de la substring extraída. Si usa AsSpan en lugar de Substring y llama a la sobrecarga de string.Concat que acepta intervalos, puede eliminar la asignación de cadenas innecesaria.

Cómo corregir infracciones

Para corregir las infracciones:

  1. Reemplace la concatenación de cadenas por una llamada a string.Concat.
  2. Reemplace las llamadas a Substring por llamadas a AsSpan.

En el fragmento de código siguiente se muestran ejemplos de infracciones y cómo corregirlas.

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));
    }
}

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla. No hay ninguna razón para usar Substring en vez de AsSpan cuando la substring extraída solo se pasa a un método con un equivalente basado en intervalos.

Vea también