如何在 csharp 中从 lambda 创建操作

本文关键字:lambda 创建 操作 中从 csharp | 更新日期: 2023-09-27 18:33:38

我想以某种方式处理一个对象,工厂在构建时知道。因此,在我的对象的构造函数中,我传递了一个在被释放时要执行的无参数函数。

如何在 csharp 中从 lambda 构造一个动作?

在伪代码中,即:

var dispose = new Action( ()  => { some side effect });

如何在 csharp 中从 lambda 创建操作

如果您不想使用 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 */ ;