2012-01-07 46 views
10

我是这个LINQ领域的新手,有一件事情正在尝试做。如何在lambda表达式中组合多个语句

我有一个行动委托(下面写),我想转换为lambda表达式。

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

相同的lambda表达式是什么。我只想知道,如果没有,我可以在lambda中编写多个语句为什么?

在此先感谢。

+0

是你可以写一个语句或块 – Peeyush 2012-01-07 09:10:23

+0

退房:http://stackoverflow.com/questions/299703/delegate-keyword-vs- lambda表示法,用于详细讨论委托符号Vs Lambda表示法。 – 2012-01-07 09:12:41

+0

你意识到将一个值赋给'name'并不会产生任何效果,对吧?所以你的第二条语句是不相关的,你可以使用非语句lambda。要么你提供了一个不好的例子,或者你的代码中可能有一个错误... – 2012-01-07 09:15:02

回答

18

您不能创建一个lambda 表达式,因为您没有返回任何内容。但是,您可以创建一个声明拉姆达:

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

这将是匿名方法。这个应该是类似 动作 customLambda = (name)=> lstCutomers.Add(new Customer(name,coutries [cnt]); name = name +“Object Created”;); 甚至没有编译。 – 2012-01-07 09:03:39

+0

那么不确定,因为'Expression'总是以一个值结尾。我认为'=>'使它成为一个lambda表达式(由于自定义类型而转换为匿名方法)。 – 2012-01-07 09:05:58

+1

@DJ:From [MSDN](http://msdn.microsoft.com/zh-cn/library/bb397687.aspx)'lambda表达式是一个可以包含表达式和语句的匿名函数',另请参阅声明Lambdas。已经更新了我的答案。 – 2012-01-07 09:07:14