StringBuilder Append(string..) 函数的返回值有什么用?

本文关键字:返回值 什么 函数 Append string StringBuilder | 更新日期: 2023-09-27 18:34:40

StringBuilder 的 Append(string s( 函数(和类似函数(的完整语法是

StringBuilder myStringBuilder.Append(string myString)

由于myStringBuilder.Append(string myString)已经将字符串添加到myStringBuilder,我想知道返回值的用途是什么?我从未见过任何使用返回值的示例代码。

根据 msdn 的说法,它不会返回一个新的StringBuilder实例,而是返回对当前构建器本身的引用(这将是myStringBuilder(。我只是想不出使用返回值根本没有意义的场景,为什么他们不void返回类型?

StringBuilder Append(string..) 函数的返回值有什么用?

这意味着您可以轻松地将呼叫链接在一起:

sb.Append("Foo=").Append(foo).Append("&Bar=").Append(bar);

。而不是使用几个单独的语句:

sb.Append("Foo=");
sb.Append(foo);
sb.Append("&Bar=");
sb.Append(bar);
它是单个表达式

的事实意味着您也可以在限制为单个表达式的地方使用它,例如字段初始化或返回语句。后者意味着您也可以将其用于表情体成员:

public override string ToString() =>
    new StringBuilder("x").Append(...).Append(...).ToString();

(在许多情况下,使用 string.Format 或内插字符串文字会更有意义,但有时StringBuilder是前进的方向......

只是为了给Jon Skeet的答案增加更多价值,值得一提的是,这是一个流畅的API设计

它有其优点和缺点,但正如 Jon Skeet 已经指出的那样,不仅在 StringBuilder 中,而且在许多其他类和框架中,能够流畅地配置或执行事物非常有趣。

也许OP从未见过list.Where(x => ...).OrderBy(x => ...).Select(x => ...).ToList().或者温莎城堡的流畅配置 API:Component.For<X>().ImplementedBy<Y>().LifeStyleSingleton()

这就是为什么StringBuilder返回调用Append的实例:能够将其他方法作为链调用,有时似乎比许多单独的句子更容易理解。

关于缺点

@Jason在一些评论中问我缺点:

马蒂亚斯,有什么缺点?

根据我自己的经验,我相信缺点很少,但最重要的缺点之一可能是流畅的链可能更难调试,因为您无法在交互式调试会话中逐步进行(实际上您可以步入和退出......但这比一步一步来更不舒服...

除了这个缺点,我发现流畅的设计是实现自动记录代码的好方法,因为有时它就像阅读自然语言句子并保持简单(对于那些已经使用流畅设计的人......