这可能是一个愚蠢的问题但是,我有一个方法,我用来使页面的语法更容易阅读
public void Do(Delegate method, DispatcherPriority priority = DispatcherPriority.Normal)
{
this.Window.Dispatcher.BeginInvoke(method, DispatcherPriority.Background);
}
然后我可以写
Do(new Action(() =>
{
//DoStuff()
}));
但是,我想将Action移动到Do方法中,这样我可以写更多简单:
Do(() =>
{
//DoStuff()
}));
但我有点肯定如何编写逆变参数来做Do方法?
答案 0 :(得分:4)
Lambda是无类型的,所以这是不可能的。
如果你不关心方法参数,那么为什么不将方法签名更改为:
public void Do(Action method,
DispatcherPriority priority = DispatcherPriority.Normal)
然后,第二个示例将正常工作,因为编译器将能够隐式地将lambda转换为Action
。
如果你真的想接受一个任何委托类型的实例,它代表一个不带参数的方法,你就必须坚持你现在拥有的东西。