如何直接将Lambda表达式转换为对象?

13

我必须像这样通过 Action 来完成:

Action action = () => { ..// };
object o = action;

有没有任何方法可以做到这一点:
object o = () =>{};  //this doesn't compile
3个回答

11

那么这个呢:

object o = (Action) (() => { ... });

虽然我不太清楚为什么你要首先将它存储为一个对象...


我正在为一个线程实现消息队列,可以将命令放入队列中以便执行。 - Benny
嗨,我在这里还比较新。如果当我正在写答案时,有人发布了完全相同的答案,那么应该遵循什么礼仪?我是不是应该将我的答案删除?现在看起来似乎有点多余。 - Spike
@Benny - 如果可以的话,考虑使用类似于Queue<Action>的通用结构,这样Lambda表达式就不必转换为对象。 - Greg
@Greg,有时候我可能想把其他对象放在队列中,而不仅仅是操作。 - Benny
@Spike - 我会让你的答案保留在原地。它可能得到更多的赞,因为你解释了委托是对象。 - Greg
@ Spike,你不必删除它。 这就是你获得赞的方法。 :) - Benny

11

嗯,委托是对象,但 Lambda 表达式不是。

这个 object o = (Action)(() => {}); 可以编译通过,但我不知道它看起来是否更好些。


6

另一个选项,与此并没有太大的不同:

object o = new Action(() => { });

实际上,我更喜欢这个。我心里本来就把另一个解决方案想象成构造函数了。不如明确表述。 - Spike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接