【问题标题】:C# Lambda Functions: returning dataC# Lambda 函数:返回数据
【发布时间】:2013-03-20 13:47:50
【问题描述】:

我是否遗漏了什么,或者无法从 lambda 函数返回值,例如..

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

或

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

我收到构建错误“无法将 lambda 表达式转换为类型‘字符串’,因为它不是委托类型”。

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

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

提前致谢!

【问题讨论】:

  • @IAbstract 您的编辑完全改变了问题,所以我回滚了。
  • @KonradRudolph:奇怪...我试图删除最后两行。谢谢你抓住那个。 :)

标签: c# .net delegates anonymous-function lambda


【解决方案1】:

这是可能的,但您正在尝试将 lambda 分配给 string。 – 您需要调用 lambda:

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

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

无法将 lambda 表达式转换为类型“字符串”

……这正是这里的问题。

如果您想调用 lambda 内联 - 但实际上:为什么? – 你也可以这样做,你只需要先明确地将它变成一个委托:

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

【讨论】:

  • 将 lambda 表达式分配给隐式类型变量将不起作用。
  • @DominicKexel 啊,非常正确。
  • 啊,真快。您回答时正在编辑我的问题。是否可以调用 lambda 内联而不是分配给 Func?谢谢!
  • 感谢康拉德。因为我有一个很好的宽屏幕,喜欢写这样的行:_queuePath = new Func&lt;string&gt;(() =&gt; { if (Directory.Exists(currentLineSplit[1])) { return currentLineSplit[1]; } else { throw new Exception("Queue path does not exist."); } })();
  • @DrewR 为什么不直接使用conditional operator? _queuePath = (Directory.Exists(currentLineSplit[1])) ? currentLineSplit[1] : throw new Exception("Queue path does not exist.");
猜你喜欢
  • 2019-04-10
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2021-11-01
相关资源
最近更新 更多