Partilhar via


Aviso CA1831: Use AsSpan em vez de indexadores baseados em intervalo para cadeia de caracteres

A regra CA1831 do analisador de código .NET está habilitada, por padrão, a partir do .NET 5. Produz um aviso de compilação para qualquer código em que um indexador baseado em Range seja usado numa string, mas não se pretendia realizar nenhuma cópia.

Alterar descrição

A partir do .NET 5, o SDK do .NET inclui analisadores de código-fonte do .NET. Várias dessas regras estão habilitadas, por padrão, incluindo CA1831. Se o seu projeto contém código que viola essa regra e está configurado para tratar avisos como erros, essa alteração pode quebrar sua compilação.

A regra CA1831 encontra instâncias em que um indexador baseado em Range é usado numa cadeia de caracteres, mas nenhuma cópia foi pretendida. Se o indexador baseado em Range for usado diretamente em uma cadeia de caracteres para produzir uma conversão implícita, será criada uma cópia desnecessária da parte solicitada da cadeia de caracteres. Por exemplo:

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

CA1831 sugere usar o indexador baseado em Range num segmento da cadeia de caracteres, em vez disso. Por exemplo:

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

Versão introduzida

5.0

  • Para corrigir o seu código e evitar alocações desnecessárias, chame AsSpan(String) ou AsMemory(String) antes de usar o indexador baseado em Range. Por exemplo:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Se não quiser alterar o código, você pode desativar a regra definindo sua gravidade como suggestion ou none. Para obter mais informações, consulte Configurar regras de análise de código.

  • Para desativar completamente a análise de código, defina EnableNETAnalyzers como false no arquivo de projeto. Para obter mais informações, consulte EnableNETAnalyzers.

APIs afetadas