如何在 csharp 中从 lambda 创建操作
本文关键字:lambda 创建 操作 中从 csharp | 更新日期: 2023-09-27 18:33:38
我想以某种方式处理一个对象,工厂在构建时知道。因此,在我的对象的构造函数中,我传递了一个在被释放时要执行的无参数函数。
如何在 csharp 中从 lambda 构造一个动作?
在伪代码中,即:
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 */ ;