c#vs.vb.net中的lambda表达式

c#vs.vb.net中的lambda表达式,c#,vb.net,lambda,C#,Vb.net,Lambda,从功能上讲,C#和VB.Net中的lambda表达式之间有什么区别(除了语法之外) 编辑:继续关注CraigTP的回答:有没有提到.NET4中的情况 编辑:我这样问是因为我习惯了C#,但对于下一个项目,客户会问VB.Net。我们不是天生反对的。我们意识到,大多数语言结构在两种语言中都受支持。然而,我们特别喜欢C#实现lambda表达式的方式。我们想概述一下与VB.Net的区别 编辑:接受CRAGTP的答案,指出我目前认为最重要的区别。 总之,VB.Net 9不支持lambda表达式中的多行语句,

从功能上讲,C#和VB.Net中的lambda表达式之间有什么区别(除了语法之外)

编辑:继续关注CraigTP的回答:有没有提到.NET4中的情况

编辑:我这样问是因为我习惯了C#,但对于下一个项目,客户会问VB.Net。我们不是天生反对的。我们意识到,大多数语言结构在两种语言中都受支持。然而,我们特别喜欢C#实现lambda表达式的方式。我们想概述一下与VB.Net的区别

<>编辑:接受CRAGTP的答案,指出我目前认为最重要的区别。


总之,VB.Net 9不支持lambda表达式中的多行语句,lambda必须始终返回值。这两个问题都在VB.Net 10中得到了解决。请看,没有理由在一天结束时,表达式将全部构建为相同的对象结构-在封面下由两种语言使用(至少在最新版本中)

但是,没有功能上的差异,如中所述:

VB.NET不支持多语句 lambda表达式还是匿名 方法

请注意,这是基于C#3.0和VB.NET 9.0(即Visual Studio 2008版本的语言)-我不确定它是否仍然适用于Visual Studio 2010(分别为C#4.0和VB.NET 10.0)

编辑:

根据Richard Szaley和我自己的评论,VB.NET 10.0(将成为Visual Studio 2010的一部分)确实支持多语句lambda,下面是指向MSDN Channel 9视频的链接,该视频展示了此功能(以及其他许多功能!):


关于使用上的细微差异,这可能也是一本不错的读物:

VB.NET(2010年之前)中的Lambda表达式必须返回一个值。例如,以下语法在VB.NET 9中无效,但在VB.NET 10中有效(源代码):


从隐式类型的lambda参数推断泛型方法参数类型的规则在VB和C#中有很大不同


我们可以整天列出细微的差异;如果你澄清你为什么要问这个问题,这可能会更快。

VB.NET支持多状态lambda表达式10@Richard-谢谢你的评论。我有一种感觉,这是他们添加到VB.NET 10.0中的东西,但不是100%确定,也没有足够的时间(在回答时)来充分研究这一点。这里有一个指向MSDN Channel 9视频的链接,展示了VB 10对多语句lambda的支持(以及更多新功能!):尽管VB.NET 10支持多语句lambda,内部宏IDE似乎不支持它。
Array.ForEach(numbers, Sub(n)
    Console.Write("Number: ")
    Console.WriteLine(n)
End Sub)