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