【发布时间】:2014-06-12 18:05:28
【问题描述】:
在尝试将StringBuilder 的Append 方法传递给采用Action<string> 的函数时,我注意到一些奇怪的事情。
public void DoStuff(Action<string> handler)
{
// Do stuff, call handler("data");
}
出于测试目的,我只是想将数据写入StringBuilder,所以我尝试这样称呼它:
var output = new StringBuilder();
DoStuff(output.Append);
但是,这会产生编译错误,因为 Append 方法与所需的签名不匹配(它返回对 StringBuilder 的引用,而不是我的方法想要的 void):
'System.Text.StringBuilder System.Text.StringBuilder.Append(string)' 的返回类型错误
不假思索,我把代码改成了这样:
var output = new StringBuilder();
DoStuff(s => output.Append(s));
这编译得很好。
然后我就糊涂了;意识到s => output.Append(s) 也应该返回StringBuilder,它们不一样吗?
那么,为什么会这样呢?为什么s => output.Append(s) 可以静默丢弃返回值,而output.Append 不能?
【问题讨论】: