分配带参数的委托

时间:2010-02-08 06:58:37

标签: c# .net c#-3.0 delegates

我正在查看BackgroundWorker.ReportProgress方法。它可能需要1个参数(int)或两个参数(int,object)。

如果我想像这样分配ReportProgress:

var ReportProgressMethod = backgroundWorker.ReportProgress;

我得到一个错误,说有一个含糊不清的引用,因为(当然)该方法可以采用参数集。

如何更改上述声明以表示我想使用该方法的int, object版本。

(这背后的想法是我想将ReportProgressMethod作为参数传递给方法。)

2 个答案:

答案 0 :(得分:13)

Action<int, object> reportProgressMethod = backgroundWorker.ReportProgress;

答案 1 :(得分:2)

您可以通过多种方式帮助编译器,但基本上您只需要以某种方式使委托类型显式化。我的首选是:

var ReportProgressMethod = new Action<int,object>(backgroundWorker.ReportProgress);

这就是编译器将要做的事情(实例化一个新的委托,无论你是否写新)但igor在他的评论中是正确的,即演员也可以。