【问题标题】:Using lambda expressions in .net 2.0 with anonymous methods在 .net 2.0 中使用带有匿名方法的 lambda 表达式
【发布时间】:2014-09-03 10:49:39
【问题描述】:

此问题与 Visual Basic .NET 2010 相关

好的,所以我在我的代码中使用了 lambda 表达式,我需要编译它以针对 .net 框架的 2.0 版本。我将无法使用 LINQ,因为它是 3.0 及更高版本,但我认为有可能在代码中使用匿名方法来允许一些 lambda 表达式。

所以说我正在使用如下代码:

AsyncOperation.Post(Sub(x) Something(x), Nothing)

支持这种语法的匿名方法是什么样的?

【问题讨论】:

  • @RowlandShaw 问题不在于 VB.NET 是否有匿名函数。
  • 那么你想知道什么? (鉴于另一个问题有一个语法示例)
  • @RowlandShaw 我想知道如何创建一个匿名方法,使我能够使用示例代码中的 lambda 语法

标签: vb.net syntax lambda


【解决方案1】:

C# 支持匿名方法和 lambda 表达式。一般来说,它们都服务于相同的目的,但它们的语法和工作方式不同。另一方面,VB.NET 仅支持 lambda 表达式。它不支持任何与 C# 的匿名方法等效的东西。然而,由于 VB.NET 的 lambda 表达式语法更类似于 C# 的匿名方法语法,因此人们在 VB.NET 中错误地将它们称为“匿名方法”并不少见,即使它们实际上是 lambda 表达式.

MSIL 本身并不支持 Lambda 表达式。它们由 VB.NET 编译器支持,该编译器构建必要的 MSIL 代码来完成所需的任务。因此,即使在 VB.NET 编译器 3.5 版本之前没有添加 lambda 表达式,也不需要 3.5 版本的框架来运行从 lambda 表达式编译的 MSIL 代码。这意味着,只要您使用 3.5 或更高版本的编译器编译 VB.NET 代码,即使使用 lambda 表达式,您也可以针对 2.0 版本的框架。

由于 Visual Studio 始终使用最高版本的编译器,因此当您使用 Visual Studio 2010 时,它将使用 3.5 版本的编译器,即使您针对的是较早版本的框架。所有这一切的结果是,当您使用 Visual Studio 2010(或更高版本)时,即使您的目标是 2.0 框架,您也可以使用 lambda 表达式和自动属性之类的东西。

【讨论】:

  • 我正在尝试使用 CodeDOM 编译器编译我的代码。如何更改其中的编译器版本?
  • CodeDOM 编译器是 .NET 框架的一部分,因此它与您正在编译的框架版本相同。如果使用 CodeDOM 的项目以 2.0 框架为目标,那么它将使用 2.0 编译器进行编译。如果需要使用 3.5 编译,则需要以 3.5 框架为目标。
  • 问题是,我需要编译为 2.0 版本的框架,同时使用 lambda 语法,它只能使用 4.0 框架为我编译。
  • 您的编译器项目可以针对 4.0 框架,并让它在构建输出程序集时添加对旧 2.0 框架库的引用。
  • 好的,我将它编译为针对 4.0 框架并且仅引用了 2.0 程序集。现在如何检查输出二进制文件是否需要 2.0 或 4.0 才能运行?
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 2011-06-23
  • 2016-10-11
  • 2013-04-24
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
相关资源
最近更新 更多