前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1845:使用基于跨度的“string.Concat”

CA1845:使用基于跨度的“string.Concat”

作者头像
呆呆
发布2022-02-26 08:38:44
3450
发布2022-02-26 08:38:44
举报
文章被收录于专栏:centosDai

规则 ID

CA1845

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

此规则查找包含 Substring 调用的字符串串联表达式,同时建议将 Substring 替换为 AsSpan 并使用基于跨度的 String.Concat 重载。

规则说明

调用 Substring 会生成提取的子字符串的副本。 通过使用 AsSpan 代替 Substring,并调用接受跨度的 string.Concat 重载,可以消除不必要的字符串分配。

如何解决冲突

若要解决冲突,请执行以下操作:

将字符串串联替换为对 string.Concat 的调用,以及

将对 Substring 的调用替换为对 AsSpan 的调用。

下面的代码片段显示了冲突示例及其解决方法。

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档