【问题标题】:Why do Linq lambdas not require a `return` statement, but mine do?为什么 Linq lambdas 不需要“return”语句,但我的需要?
【发布时间】:2012-10-14 22:23:48
【问题描述】:

我在库中使用了相当多的 lambda。真正让我恼火的一件事是我似乎无法摆脱 return 语句,而且我在它们周围有相当多的样板类型代码。

到目前为止,它是这样工作的:

public delegate IBarelyView HandlerInvoker(IDictionary<string, string> route, IDictionary<string, string> form);
public void MyFunc(string foo, HandlerInvoker invoker) { }

这是我让工人使用 MyFunc 的代码:

MyFunc("foobar", (x, y) => { return new Xyz();});

现在我知道这还不错。但是,我真的很想能够使用 Linq 类型语法。例如,这很容易做到

ObjectList.Where(x=>x.Foo=="bar");

如您所见,Linq 语法的优点是没有return 语句,“参数”周围没有括号,也没有花括号。

为什么我的 lambda 表达式中不能有这种语法?如果我删除 return 语句,我会收到关于并非所有代码路径都返回值的错误。

【问题讨论】:

    标签: c# .net linq delegates lambda


    【解决方案1】:

    试试:MyFunc("foobar", (x, y) =&gt; new Xyz());

    【讨论】:

    • 我这辈子都不记得为什么我首先使用花括号。我认为要求退货声明是他们的错?>
    • 大括号包裹了一个语句块,因此需要返回。很高兴它起作用了 :) 考虑到你惊人的代表,我在那里吓坏了;)
    • @Earlz:这里的相关术语是“表达式 lambdas”和“语句 lambdas”。
    • @LewsTherin 好吧,我们都有自己的愚蠢时刻,并且代表不等于经验(尽管我真的应该知道我已经使用 .Net 多长时间了)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多