C#和VB.NET中的Lambda表达式对比

9
除了语法外,在C#和VB.Net中的Lambda表达式在功能上有什么区别吗?关于.Net 4的情况,您有参考资料吗?我之所以问这个问题是因为我习惯于使用C#,但是对于下一个项目,客户要求使用VB.Net。我们并不反对这样做。我们意识到大多数语言结构都支持这两种语言。然而,我们特别喜欢C#实现Lambda表达式的方式。我们希望了解与VB.Net的差异概述。CraigTP的回答指出了我目前认为最重要的差异,因此我接受了他的回答。总结一下:VB.Net 9不支持Lambda表达式中的多行语句,并且Lambda表达式必须始终返回一个值。这些问题都在VB.Net 10中得到了解决。
5个回答

13

然而,正如Joe Albahari这个论坛帖子中所说,没有任何功能上的区别:

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视频的链接,展示了此功能(以及许多其他功能!):

Lucian Wischik与Lisa Feigenbaum:Visual Basic 10的新功能


VB.NET 10支持多语句lambda表达式。 - Richard Szalay
@Richard - 感谢您的评论。我有一种感觉,这是他们在 VB.NET 10.0 中添加的内容,但不是100%确定,并且在回答时没有完全研究此问题的时间。 - CraigTP
1
这是一个链接,指向 MSDN Channel 9 上的一个视频,展示了 VB 10 对多语句 Lambda(以及许多其他新功能)的支持:http://channel9.msdn.com/posts/Dan/Lucian-Wischik-and-Lisa-Feigenbaum-Whats-new-in-Visual-Basic-10/ - CraigTP
尽管VB.NET 10支持多语句lambda,但内部的宏IDE似乎不支持它。 - Earth Engine

8

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

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

4

我不认为会有任何问题,最终这些表达式都将构建为相同的对象结构 - 被两种语言在内部使用(至少在最新版本中)。


4
从隐式类型的 lambda 参数推断通用方法参数类型的规则在 VB 和 C# 中有所不同。
我们可以列举出许多细微的差异;如果您能澄清为什么要问这个问题,那么可能会更快。

1

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