Aviso CA1831: usar o AsSpan em vez de indexadores baseados em intervalo para cadeias de caracteres

A regra CA1831 do analisador de código do .NET está habilitada por padrão do .NET 5 em diante. Ela gera um aviso de build para códigos em que um indexador baseado em Range é usado em uma cadeia de caracteres, quando não há intenção de cópia.

Descrição das alterações

Do .NET 5 em diante, o SDK do .NET inclui Analisadores de código-fonte do .NET. Várias dessas regras estão habilitadas, por padrão, inclusive a CA1831. Se o projeto contiver um código que viole essa regra e estiver configurado para tratar avisos como erros, essa alteração poderá interromper o build.

A regra CA1831 localiza instâncias em que um indexador baseado em Range é usado em uma cadeia de caracteres, quando não há intenção de cópia. Se o indexador baseado em Range for usado diretamente em uma cadeia de caracteres para gerar 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];

A CA1831 sugere o uso do indexador baseado em Range em um intervalo da cadeia de caracteres. Por exemplo:

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

Versão introduzida

5,0

  • Para corrigir o 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 você não quiser alterar o código, desabilite a regra definindo a severidade como suggestion ou none. Para obter mais informações, confira Configurar regras de análise de código.

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

APIs afetadas