【问题标题】:VB.NET Lambda ExpressionsVB.NET Lambda 表达式
【发布时间】:2010-11-12 19:52:26
【问题描述】:

如果我有 Visual Studio 2008 并且我的目标是 .NET 2.0 应用程序,我还可以使用 Lambda 表达式吗?我对 Lambda 表达式的理解是它是编译器内置的功能,而不是框架,所以我的结论是我可以在 .NET 2.0 应用程序中使用 Lambda。有人可以告诉我是不是这样吗?

【问题讨论】:

    标签: vb.net visual-studio visual-studio-2008 lambda


    【解决方案1】:

    是的,这是完全支持的。只要您不构建表达式树或以其他方式引用 System.Core、System.Xml.Linq 等……在向下定位的 2.0 应用程序中使用 Lambda 表达式是完全合法的。 VS2008 (VB9) 中引入的任何其他编译器功能都是如此。

    编辑

    一些答案​​错误地指出 Lambda 表达式是 3.5 或 3.0 功能的一个功能。 Lambda 表达式是一种编译器功能,而不是框架功能。它们不需要框架支持即可运行,并且在针对 2.0 的应用程序中使用它们是完全合法的。

    唯一会遇到麻烦的地方是使用 lambda 作为表达式树。表达式树既是编译器又是框架功能,需要 3.5 才能正常运行。但是您必须努力实现这一点,因为我们积极尝试防止它发生。

    【讨论】:

      【解决方案2】:

      是的,你是对的。您可以使用 lambda 表达式代替匿名方法。编译器将整理其余部分。试试这个:

      int sum = 0;
      Array.ForEach(new[] {1, 2, 3, 4}, x => sum += x);
      

      您不能做的是使用 .Net 3.5(即 Linq)的任何新功能。这样做需要添加对 System.Linq、System.Core 等的引用,这些在 .Net 2.0 中不存在。

      【讨论】:

        【解决方案3】:

        它不起作用。使用 Linq 需要 System.Linq 是框架程序集的一部分,而 .NET 2.0 没有。

        【讨论】:

        • 是的,丹丹说得对。此外,不,您不能通过将 3.5 程序集放入您的垃圾箱中来引用它们。我问过...问题是 System 命名空间也发生了很多变化。
        • 事实并非如此。如果您有足够可用的 LINQ 方法(例如 Select 和 Where),则可以肯定地使用 3.5 编译器 (Vb9) 来支持 LINQ 以针对 2.0 应用程序。 C# 也是如此
        猜你喜欢
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多