为什么 StringBuilder Append 方法返回一个 StringBuilder 对象?

问题描述

因此,如果您查看“StringBuilder”的任何 Append 方法,返回类型是 StringBuilder。不是字符串或行数或任何您可能认为直观有用的东西。表面上(我还没有检查过),它与您刚刚调用方法StringBuilder 对象相同。

我实在想不出这样做的原因。有吗?

解决方法

这是所谓的“流畅接口”或“流畅 API”的一种简单形式。 (请参阅This wikipedia article)遵循该模式的 API 允许链接方法,这在开始时可能看起来很奇怪,但可能会使代码更自然地阅读。另一个实现此功能的著名 API 是 linq,您可以在其中编写类似

myList.Where(x => x.Element1 > 1).OrderBy(x => x.Element2).Select(x => x.Element3);

或者,作为一个非常复杂的 fluent API 示例,来自 Nuke build 的任务描述:

Target CompileForMatlab => _ => _
    .Executes(() =>
    {
        MSBuild(s => s
                    .SetSolutionFile(Solution)
                    .SetConfiguration(Configuration)
                    .AddTargets("Restore,Build,Publish")
                    .SetProjectFile(Solution.GetProject("ExtendedLogParser"))
                    .SetOutDir(ArtifactsDirectory / "ExtendedLogParser")
                    .SetProperty("Platform",Platform)
                    .AddProperty("SelfContained",true)
                    .AddProperty("RuntimeIdentifier","win10-x64")
                    .AddProperty("PublishDir","../ExtendedLogParser")
                    .DisableNodeReuse());
    });