我如何阅读此C#代码-Action <对象> actDelegateTakeObjAsParam =(Action <对象>)(obj => actionImp());

时间:2018-09-26 21:54:20

标签: c# delegates

我在Mvvm代码中发现的示例。

Action<object> actDelegateTakeObjAsParam = (Action<object>) (obj => actionImp());

我想我了解它的作用,但是语法上有麻烦。

1 个答案:

答案 0 :(得分:0)

Action<object> actDelegateTakeObjAsParam

声明类型为actDelegateTakeObjAsParam的名为Action<object>的变量(一个接受object并返回void的委托,即没有返回值)。

= (Action<object>)(obj => actionImp());

向其分配类型为Action<object>的委托实例,该委托实例采用参数obj,将其忽略,然后调用actionImp()(无论如何)。

基本上,它看起来像将委托重新包装为另一种类型-也许actionImp实际上是ActionThreadStartMethodInvoker(所有这些都是无参数的)并且不返回值)或Func<string>(无参数,但返回string);这样就可以像使用actionImp一样使用Action<object>的意图。

次要注意事项:由于obj被忽略,因此最近的约定是使用_代替obj作为名称,即_ => actionImp()