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 9 | 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:
- Reemplace la concatenación de cadenas por una llamada a
string.Concat
. - Reemplace las llamadas a
Substring
por llamadas aAsSpan
.
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.