2013-03-20 41 views
13

我缺少的东西或者是没可能返回从一个lambda函数的值,如..C#lambda函数:返回数据

Object test =() => { return new Object(); };

string test =() => { return "hello"; };

我获取构建错误“无法将lambda表达式转换为键入'string',因为它不是委托类型”。

这就像这个语法分配的lambda而不是lambda的结果,我没有想到。 我可以通过将函数分配给Func并按名称调用它来实现所需的功能,但这是唯一的方法吗?

请不要“你为什么需要这样做?”关于我的例子。

在此先感谢!

+0

@IAbstract你的编辑完全改变了问题,所以我把它回滚。 – 2013-03-20 13:55:51

+0

@KonradRudolph:奇怪......我曾尝试*删除最后2行。感谢您的支持。 :) – IAbstract 2013-03-20 16:04:31

+0

[如何使用匿名方法返回值?]可能的重复(http://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method) – Roflo 2015-11-18 17:26:01

回答

32

这是可能的,但你试图分配一个lambda到string。 - 你需要调用拉姆达:

Func<string> f =() => { return "hello"; }; 
string test = f(); 

错误消息实际上说明了一切:

无法转换lambda表达式到类型 '串'

...这也正是问题在这里。

如果你想调用lambda内联 - 但真的:为什么? - 你也可以这样做,你只需要先把它变成一个代表明确:

string test = (new Func<string>(() => { return "hello"; }))(); 
+1

将lambda表达式分配给隐式类型变量将不起作用。 – sloth 2013-03-20 13:50:14

+0

@DominicKexel啊,非常真实。 – 2013-03-20 13:50:36

+0

啊,那很快。只是在你回答时编辑我的问题。是否可以调用lambda内联而不是分配给Func ? 谢谢! – 2013-03-20 13:52:00