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

时间:2010-01-20 07:25:13

标签: c# vb.net lambda

从功能上讲,C#和VB.Net中的lambda表达式之间是否存在差异(除了语法之外)?

编辑:跟进CraigTP的回答:.Net 4中对情况的任何引用?

编辑:我问,因为我习惯了C#,但是对于下一个项目,客户要求VB.Net。我们不是先验者。我们意识到大多数语言结构都支持两种语言。但是,我们特别喜欢C#实现lambda表达式的方式。我们想概述与VB.Net的差异

编辑:接受了CraigTP的回答,指出了我目前认为最重要的区别。

总结一下:VB.Net 9不支持lambda表达式中的多行语句,而lambda必须始终返回一个值。这两个问题都在VB.Net 10中得到解决

5 个答案:

答案 0 :(得分:13)

然而,Joe Albaharithis forum post表示功能没有功能的区别:

  

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的一部分) DOES 支持多语句lambda,这里是指向MSDN Channel 9的链接显示此功能的视频(以及许多其他功能!):

Lucian Wischik and Lisa Feigenbaum: What's new in Visual Basic 10

答案 1 :(得分:8)

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

Array.ForEach(numbers, Sub(n)
    Console.Write("Number: ")
    Console.WriteLine(n)
End Sub)

答案 2 :(得分:4)

在一天结束时,没有理由说明表达式将全部构建到相同的对象结构 - 两种语言在封面下使用(至少使用最新版本)

答案 3 :(得分:4)

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

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

答案 4 :(得分:1)

对于使用中的细微差异,这也可能是一个很好的解读: Linq Training Guide