警告 CA1831:对字符串使用 AsSpan 而不是基于范围的索引器

默认情况下,从 .NET 5 开始,启用 .NET 代码分析器规则 CA1831 。 对于在字符串中使用基于 Range 的索引器,但不打算进行复制的任何代码,都将生成一个生成警告。

更改描述

从 .NET 5 开始,.NET SDK 包括 .NET 源代码分析器。 默认情况下,会启用其中几个规则,包括 CA1831。 如果项目包含违反此规则的代码,并且配置为将警告视为错误,则此更改可能会中断生成。

规则 CA1831 查找在字符串中使用基于 Range 的索引器但不打算进行复制的实例。 如果直接在字符串中使用基于 Range 的索引器来生成隐式强制转换,则会创建字符串请求部分的不必要副本。 例如:

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

相反,CA1831 建议在字符串的“范围”上使用基于 Range 的索引器。 例如:

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

已引入的版本

5.0

  • 在使用基于AsSpan(String)的索引器之前,若要更正代码并避免不必要的分配,请调用AsMemory(String)Range。 例如:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • 如果不想更改代码,可以通过将规则的严重性设置为suggestionnone来禁用该规则。 有关详细信息,请参阅 “配置代码分析规则”。

  • 若要完全禁用代码分析,请在项目文件中设置为EnableNETAnalyzersfalse。 有关详细信息,请参阅 EnableNETAnalyzers

受影响的 API