警告 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

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

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

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

受影响的 API