Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用VisualStudio2008在2.0中实现C.NET3.0/3.5功能_C#_.net_Visual Studio - Fatal编程技术网

C# 使用VisualStudio2008在2.0中实现C.NET3.0/3.5功能

C# 使用VisualStudio2008在2.0中实现C.NET3.0/3.5功能,c#,.net,visual-studio,C#,.net,Visual Studio,升级到VisualStudio2008后,.NET2.0中可以使用哪些特定于C3.0/3.5的新功能?此外,还有哪些功能不可用 可用 兰博达斯 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见 不可用 表达式树 WPF/Silverlight库 Lambdas和扩展方法完全由编译器处理,可以与.Net 2.0框架

升级到VisualStudio2008后,.NET2.0中可以使用哪些特定于C3.0/3.5的新功能?此外,还有哪些功能不可用

可用

兰博达斯 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见 不可用

表达式树 WPF/Silverlight库
Lambdas和扩展方法完全由编译器处理,可以与.Net 2.0框架一起使用。

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

namespace System.Runtime.CompilerServices {
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
    sealed class ExtensionAttribute : Attribute { }
}

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

Lambdas用作Func,而不是表达式 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见
之前有一个关于类似内容的讨论,您可能也想阅读:


几乎所有的东西!丹尼尔·莫思(Daniel Moth)报道了这一点。这只剩下运行时支持:LINQtoObjects由提供,只剩下更大的API,如表达式支持,以及LINQtoSQL等工具。这些文件太大,无法合理地移植回.NET2.0,因此我会使用.NET3.5来处理这些文件

我在一篇文章中谈到了这一点


针对.NET2.0时,几乎所有C3.0功能都可用。对于扩展方法,您需要定义一个额外的属性。表达式树根本不可用。查询表达式支持是基于一个翻译,后面跟着普通的C规则,因此您需要一些东西来提供Select、Where等方法。是.NET2.0实现中事实上的标准LINQto对象。您可能希望在Func和Action委托族中声明委托,以便更轻松地使用lambda表达式,然后如果/当您移动到.NET 3.5时,您可以使用完全支持LINQ和表达式树的Mono版本System.Core,则删除它们。 我根据.net2.0编译了它的源代码,现在我可以在.net2.0项目中使用它。
这对于需要部署在win2k上的项目非常有用,因为在win2k上.net3.5不可用。

Lambdas作为代理,是的。但是lambdas作为表达式依赖于.NET3.5中的表达式类。我也不得不这样做。我发现您在另一个站点上建议这样做,以便能够在3.5SP1项目中使用Ninject 1.0 for 2.0。非常复杂…这些表达式树需要.NET2.0SP1吗?不需要。纯旧的.NET2.0。即使在win2k机器上也能很好地工作。表达式树可以通过使用Mono获得。见下面我的答案。