如何在lambda表达式中组合多个语句

10

我对LINQ领域很陌生,现在正在尝试做一件事情。

我有一个动作委托(如下所示),我想将其转换为Lambda表达式。

      Action<string> custom = delegate(string name)
            {
                lstCutomers.Add(new Customer(name, coutries[cnt]));
                name = name + " Object Created";
            };

对于同样的内容,lambda表达式是什么?我只想知道是否可以在lambda中编写多个语句,如果不行,为什么?

提前致谢。


是的,您可以编写单个语句或一组语句。 - Peeyush
请查看以下链接以获取有关委托符号与Lambda符号的详细讨论:https://dev59.com/Q3VC5IYBdhLWcg3wbQfA。 - Christophe Geers
你应该意识到将值赋回给 name 不会有任何影响,对吧?所以你的第二个语句是无关紧要的,可以使用非语句lambda表达式。要么你举的例子有问题,要么你的代码可能存在错误... - Jon Skeet
1个回答

19

你无法创建一个lambda表达式,因为你没有返回任何东西。但是你可以创建一个语句lambda:

Action<string> custom = (name) =>
        {
            lstCutomers.Add(new Customer(name, coutries[cnt]));
            name = name + " Object Created";
        };

1
@DJ:从MSDN上可以看到,Lambda表达式是一个匿名函数,它可以包含表达式和语句。此外,请参阅关于语句Lambda的部分。我已经更新了我的答案。 - George Duckett
请参见我链接到的MSDN页面上“Lambda表达式中的变量作用域”的第一个示例。语法与语句lambda相同,只是您需要返回一些内容。 - George Duckett
@DJ:在像Parallel.ForEach这样的东西中,这是相当普遍的。 - Jon Skeet
1
@GeorgeDuckett:我在回答关于在哪里可以使用具有多个语句的lambda表达式的原帖问题。此外,不返回任何内容与语句lambda无关:您可以拥有返回值的语句lambda和不返回任何内容的非语句lambda。 - Jon Skeet
3
请注意,在您的第一条评论中,您谈到的是“Expression”,这仅在将Lambda表达式转换为表达式树时使用。这在此处无关紧要。语句lambda和非语句lambda都是Lambda表达式。(规范实际上不使用术语“语句lambda”-它讨论了具有表达式或语句主体的Lambda表达式。) - Jon Skeet
显示剩余5条评论

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