警告 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];
如果不想更改代码,则可通过将规则的严重性设置为
suggestion
或none
来禁用规则。 有关详细信息,请参阅配置代码分析规则。若要完全禁用代码分析,请在项目文件中将
EnableNETAnalyzers
设置为false
。 有关详细信息,请参阅 EnableNETAnalyzers。