0

阅读我发现的一些代码:

ThreadPool.QueueUserWorkItem(delegate { this.SaveInternal(); });

为什么会有人放在delegate这里?

4

2 回答 2

2

像这样使用委托只是传递任何您不关心参数的有效委托的捷径,同时保持编译器满意。否则,您将必须传递与委托签名匹配的方法。

于 2013-09-06T15:17:04.627 回答
2

最明显的答案是因为没有它代码将无法编译。例如:

ThreadPool.QueueUserWorkItem( { this.SaveInternal(); });

Invalid expression term '{'

QueueUserWorkItem需要一个WaitCallback参数,这是一个带Object参数的方法。你所拥有的长形式是:

ThreadPool.QueueUserWorkItem((state) => { this.SaveInternal(); });

这与以下内容相同:

void Temp(Object state)
{
    this.SaveInternal();
}

ThreadPool.QueueUserWorkItem(Temp);

添加delegate { this.SaveInternal(); }允许编译器使用类型推断来解决明显的歧义。

于 2013-09-06T15:22:46.990 回答