Compartilhar via


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

A regra do analisador de código .NET CA1831 está habilitada, por padrão, a partir do .NET 5. 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 da alteraçã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 projeto contiver código que viole essa regra e estiver configurado para tratar avisos como erros, essa alteração poderá interromper o build.

A regra CA1831 encontra casos em que um indexador baseado em Range é usado em uma string, mas nenhuma cópia foi pretendida. Se o indexador baseado em Range for usado diretamente sobre uma cadeia de caracteres para gerar uma conversão implícita, uma cópia desnecessária da parte solicitada da cadeia de caracteres é feita. 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 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 você não quiser alterar seu código, poderá desabilitar a regra definindo sua severidade para 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 do projeto. Para obter mais informações, consulte EnableNETAnalyzers.

APIs afetadas