代码之家  ›  专栏  ›  技术社区  ›  Russell Myers

使用Visual Studio 2008的2.0中的C.NET 3.0/3.5功能

  •  13
  • Russell Myers  · 技术社区  · 16 年前

    升级到Visual Studio 2008之后,可以在.NET 2.0中使用哪些特定于C_3.0/3.5的新功能?此外,还有哪些功能不可用?

    可用的

    • 兰姆达斯
    • 扩展方法(通过声明空的System.Runtime.CompilerServices.ExtensionAttribute)
    • 自动属性
    • 对象初始化器
    • 集合初始化器
    • Linq to对象(通过实现IEnumerable扩展方法,请参见 LinqBridge )

    无法使用的

    • 表达式树
    • WPF/Silverlight库
    7 回复  |  直到 15 年前
        1
  •  16
  •   Lucas    15 年前

    您可以使用编译器通过发出2.0兼容的IL处理的任何新的C 3.0功能,并且不引用任何新的3.5程序集:

    • 羊羔肉(用作 Func<..> 不是 Expression<Func<..>> )
    • 扩展方法(通过声明空的System.Runtime.CompilerServices.ExtensionAttribute)
    • 自动属性
    • 对象初始化器
    • 集合初始化器
    • Linq to对象(通过实现IEnumerable<t>扩展方法,请参见 LinqBridge )
        2
  •  5
  •   Marc Gravell    16 年前

    几乎所有的事情!丹尼尔·莫斯报道了这个 here here . 只剩下运行时支持:linq to对象由 LINQBridge -它只剩下更大的API(如表达式支持)和工具(如LinqToSQL)。这些太大了,无法合理地移植回.NET 2.0,因此我将使用.NET 3.5来处理这些问题。

        3
  •  5
  •   Jon Skeet    16 年前

    我用一个 article on my site .

    当面向.NET 2.0时,几乎所有C 3.0功能都可用。对于扩展方法,需要定义一个额外的属性。表达式树根本不可用。查询表达式支持基于一个翻译,后面跟着“普通”C规则,所以您需要一些东西来提供select、where等方法。 LINQBridge 是事实上的标准“linq to objects in.NET 2.0”实现。您很可能希望在 Func Action 委托族以便于使用lambda表达式-然后在移动到.NET 3.5时删除它们

        4
  •  3
  •   Curt Hagenlocher    16 年前

    要定义扩展方法,如果您的目标是.NET 2.0,则需要提供以下类:

    namespace System.Runtime.CompilerServices {
      [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
        sealed class ExtensionAttribute : Attribute { }
    }
    
        5
  •  2
  •   Community Egal    7 年前

    之前有过类似的讨论,您也可能想阅读:

    Targeting .NET Framework 3.5, Using .NET 2.0 Runtime. Caveats?

        6
  •  2
  •   Omer Mor    15 年前

    您可以使用完全支持Linq&Expression树的System.Core的Mono版本。 我根据.NET 2.0编译了它的源代码,现在我可以在.NET 2.0项目中使用它。 这对于需要部署在win2k上的项目非常有用,其中.net3.5不可用。

        7
  •  1
  •   James Curran    16 年前

    lambda&extension方法完全由编译器处理,可以与.NET 2.0框架一起使用。