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
Acción recomendada
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 ennone
. 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
enfalse
en el archivo del proyecto. Para obtener más información, vea EnableNETAnalyzers.
API afectadas
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de