0

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

如何从 csharp 中的 lambda 构造一个 Action?

在伪代码中:

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

1 回答 1

3

如果您不想使用 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 */ ;
于 2013-10-03T10:09:53.090 回答