我想以某种方式处理对象,工厂在构建时就知道。因此,在我的对象的构造函数中,我传递了一个无参数函数,以便在处理时执行。
如何从 csharp 中的 lambda 构造一个 Action?
在伪代码中:
var dispose = new Action( () => { some side effect });
我想以某种方式处理对象,工厂在构建时就知道。因此,在我的对象的构造函数中,我传递了一个无参数函数,以便在处理时执行。
如何从 csharp 中的 lambda 构造一个 Action?
在伪代码中:
var dispose = new Action( () => { some side effect });
如果您不想使用 Action 构造函数,则始终可以显式指定变量类型,这在涉及操作、函数和表达式时通常是必需的。
像这样:
Action dispose = () => { /* do something */ };
Action<int> dispose = someInt => { /* do something with the 'someInt' parameter */ };
Action<int, string> dispose = (someInt, someString) => { /* do something with the two parameters */ };
你不能在这里使用 var 的原因是因为这也可以是一个表达式
/* equally valid */
Expression<Action<<int, string>> dispose = (someInt, someString) => /* do something with the two parameters */ ;
表达式变体的唯一要求是您的操作主体只能是一行代码。(你不能使用花括号)
这就是为什么“var”在这种情况下不起作用的原因,编译器无法确定你是在指定一个动作还是一个动作的表达式:
/* will not compile */
var dispose = (someInt, someString) => /* do something with the two parameters */ ;