是否可以使用方法作为扩展方法的第一个参数?

时间:2016-03-22 19:55:51

标签: c# extension-methods

我试着这样做:

public static EventHandler ToEventHandler(this Action callback)
{...}
当我想将void x()这样的简单方法传递给EventHandler的方法时,

会出现一些语法糖。

但是当我尝试这样称呼时:

SomeMethod(x.ToEventHandler());

我收到编译错误:

x() is a 'method', which is not valid in the given context  

由于方法是.NET中的一等公民,我不明白为什么这不可能。为什么它不喜欢这样,还有另一种方法来实现我想要做的事情吗?

1 个答案:

答案 0 :(得分:0)

你不能这样做,因为x是一个方法,并且编译器在使用扩展方法时不会通过其标识符将方法神奇地转换为委托(我相信它应该能够这样做) ...)。

您需要的是:SomeMethod(new Action(x).ToEventHandler());

另一方面,EventHandler有两个输入参数,而您希望使用Action(无参数委托...)。我怀疑你正在尝试这个:

EventHandler handler = (sender, e) => callback();

......然后,如果你要走这条路,那很好。