值
规则 ID
CA1845
类别
“性能”
修复是中断修复还是非中断修复
非中断
原因
此规则查找包含 Substring 调用的字符串串联表达式,同时建议将 Substring 替换为 AsSpan 并使用基于跨度的 String.Concat 重载。
规则说明
调用 Substring 会生成提取的子字符串的副本。 通过使用 AsSpan 代替 Substring,并调用接受跨度的 string.Concat 重载,可以消除不必要的字符串分配。
如何解决冲突
若要解决冲突,请执行以下操作:
将字符串串联替换为对 string.Concat 的调用,以及
将对 Substring 的调用替换为对 AsSpan 的调用。
下面的代码片段显示了冲突示例及其解决方法。
using System;
class Example
{
public void Method()
{
string text = "fwobz the fwutzle";
// Violation: allocations by Substring are wasteful.
string s1 = text.Substring(10) + "---" + text.Substring(0, 5);
// Fixed: using AsSpan avoids allocations of temporary strings.
string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
}
}
何时禁止显示警告
不要禁止显示此规则的警告。 当提取的子字符串仅传递给具有基于跨度的等效项的方法时,没有理由在 AsSpan 上使用 Substring。
另请参阅
性能规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。