12

我们都知道strings是不可变的,而 StringBuilder 是mutable. 正确的。那为什么它的方法返回一个StringBuilder对象。它们不应该都是 void 方法吗?

为什么这个

public StringBuilder Append(bool value)

并不是

public void Append(bool value)

任何解释使用它的例子都会很棒。

4

2 回答 2

21

它被称为“流畅的界面”。它允许您通过重复的点符号将调用链接在一起。

return new StringBuilder()
  .Append("Hello, ")
  .Append("world!")
  .ToString();
于 2012-09-07T11:16:42.893 回答
15

来自MSDN

大多数修改此类实例的方法都返回对同一实例的引用。由于返回了对实例的引用,因此您可以调用该引用的方法或属性。如果您想编写一个将连续操作一个接一个地链接起来的单个语句,这会很方便。

示例

string user = new StringBuilder()
    .AppendFormat("Name: {0}", user.Name)
    .AppendLine()
    .AppendFormat("Email: {0}", user.Email)
    .AppendLine()
    .ToString();

这通常称为fluent interface

于 2012-09-07T11:17:20.617 回答