Share via


Advertencia CA1831: Uso de AsSpan en lugar de indizadores basados en intervalos para una cadena

La regla CA1831 del analizador de código de .NET está habilitada de forma predeterminada a partir de .NET 5. Genera una advertencia de compilación para cualquier código donde se usa un indizador basado en Range en una cadena, pero no está prevista ninguna copia.

Descripción del cambio

A partir de .NET 5, el SDK de .NET incluye analizadores de código fuente de .NET. Varias de estas reglas están habilitadas de forma predeterminada, incluida la regla CA1831. Si el proyecto contiene código que infringe esta regla y está configurado para tratar las advertencias como errores, este cambio podría interrumpir la compilación.

La regla CA1831 busca instancias en las que se usa un indizador basado en Range en una cadena, pero donde no está prevista ninguna copia. Si el indizador basado en Range se usa directamente en una cadena para generar una conversión implícita, se crea una copia innecesaria de la parte solicitada de la cadena. Por ejemplo:

ReadOnlySpan<char> slice = str[1..3];

CA1831 sugiere, en su lugar, el uso del indizador basado en Range en un intervalo de la cadena. Por ejemplo:

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

Versión introducida

5.0

  • Para corregir el código y evitar asignaciones innecesarias, llame a AsSpan(String) o AsMemory(String) antes de usar el indizador basado en Range. Por ejemplo:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Si no quiere cambiar el código, puede deshabilitar la regla estableciendo su gravedad en suggestion o en none. Para obtener más información, vea el artículo Configuración de reglas de análisis de código.

  • Para deshabilitar completamente el análisis de código, establezca EnableNETAnalyzers en false en el archivo del proyecto. Para obtener más información, vea EnableNETAnalyzers.

API afectadas