Предупреждение CA1831: используйте AsSpan вместо индексаторов на основе диапазона для строки

Правило анализатора кода .NET CA1831 включено по умолчанию, начиная с .NET 5. Оно создает предупреждение сборки для любого кода, в котором для строки используется индексатор на основе Range, но копирование не планировалось.

Описание изменения

Начиная с .NET 5 пакет SDK для .NET включает анализаторы исходного кода .NET. Некоторые из этих правил включены по умолчанию, включая CA1831. Если проект содержит код, нарушающий это правило и настроенный на обработку предупреждений как ошибок, это изменение может нарушить сборку.

Правило CA1831 находит экземпляры, в которых для строки используется индексатор на основе Range, но копирование не планировалось. Если индексатор на основе Range используется непосредственно в строке для создания неявного приведения, то создается ненужная копия запрошенной части строки. Например:

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

CA1831 предлагает использовать индексатор на основе Range в span строки. Например:

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

Представленные версии

5,0

  • Чтобы исправить код и избежать ненужных выделений, вызовите AsSpan(String) или AsMemory(String) перед использованием индексатора на основе Range. Например:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Если вы не хотите изменять код, можно отключить правило, задав серьезность suggestion или none. Дополнительные сведения см. в разделе Настройка правил анализа кода.

  • Чтобы полностью отключить анализ кода, задайте для параметра EnableNETAnalyzers значение false в файле проекта. Дополнительные сведения см. в разделе EnableNETAnalyzers.

Затронутые API