是否有一个适用于.NET3.5的C#4.0更改列表?

是否有一个适用于.NET3.5的C#4.0更改列表?,c#,.net,c#-4.0,compatibility,C#,.net,C# 4.0,Compatibility,最近我看到了很多C#4.0的变化。我真的很喜欢其中的一些。不过,出于兼容性的原因,我现在还不想转到.NET4.0 那么,是否有一个全面的列表,列出将在.NET3.5或更低版本上运行的新C#4.0语言特性 例如,默认参数是否需要.NET 4.0 CLR,或者它们是编译器功能?可以使用自动属性(一个C#3.0特性)但仍然以.NET 2.0为目标,因为这不需要框架支持,但不可以使用LINQ表达式,因为这需要框架3.5 请不要说“当然,C#4.0在.Net 3.5中不起作用,因为它太旧了”我知道,通过C

最近我看到了很多C#4.0的变化。我真的很喜欢其中的一些。不过,出于兼容性的原因,我现在还不想转到.NET4.0

那么,是否有一个全面的列表,列出将在.NET3.5或更低版本上运行的新C#4.0语言特性


例如,默认参数是否需要.NET 4.0 CLR,或者它们是编译器功能?可以使用自动属性(一个C#3.0特性)但仍然以.NET 2.0为目标,因为这不需要框架支持,但不可以使用LINQ表达式,因为这需要框架3.5


请不要说“当然,C#4.0在.Net 3.5中不起作用,因为它太旧了”

我知道,通过CLR 2.0中的IL注释+和-中的类型参数,协方差和逆变有一些支持。但不确定其他功能。

4.0中的C#编译器附带了一个新的多目标功能。简短的版本是,它将使用定义System.Object(通常是mscorlib.dll)的引用中存在的任何元数据版本生成程序集。这允许您使用它来编译2.0和3.5的程序集,以及各种版本的Silverlight。此功能的引入是为了支持VisualStudio2010中的多目标

因此,您可以使用C#4.0编译器编译3.5程序集,并利用您想要的任何C#4功能,只要对4.0库没有特别的依赖。例如,命名参数和可选参数可以正常工作,因为它们不使用任何4.0框架特性。然而,Dynamic是这样做的,所以开箱即用的它在3.5上不起作用

这里有一篇关于这个的帖子,涵盖了基本知识

(教育署发帖)名单如下:

  • 命名参数和可选参数
  • 某些COM语法改进(例如,“省略ref”)
  • 一般方差

不起作用的事情包括动态和无pia(就实现它们的时间而言,我们的两大支出)。前者需要框架支持,后者需要运行时支持。

考虑到默认参数已经是VB.NET的一项功能,C#可能只是在编译器级别实现了它。然而,CLR团队本可以实施一种全新的方法来实现这一点


您应该准备修改您的问题,说明“C#4.0的哪些功能是适用于.NET 3.5 framework的编译器更改”

这不是一个列表,也不是确定的,但作为一个例子,我刚刚针对.NET 3.5设置了一个新的VS2010项目,并成功创建了一个带有默认参数的方法,并使用命名参数对其进行调用,这两个参数都是C#4.0特性。

我正在考虑对“旧”规范的更改。。。
lock
更改将不可用,因为这需要一个新的重载,但应该可以工作。我必须检查编译器发出的信息-p

果然:

using System;
class Program
{
    public event EventHandler SomeHandler;
    static void Main() { }
}

获取新样式的访问器-p

我不确定是否有,因为.NET4.0带来了新版本的CLR。无法在2.0 CLR(CLR.NET 3.5使用的)中运行.NET 4程序集。据我所知,C#4编译器没有针对3.5提供任何方法。例如,默认参数是否需要.NET 4.0 CLR,或者它们是编译器功能?可以使用自动属性(C#3.0功能)但仍然以.NET 2.0为目标,因为这不需要框架支持,但不能使用LINQ表达式,因为它需要框架3.5。@John,是的,这就是我要问的。我不知道有这么多人认为C#和。Net@Earlz:实际上,您仍然可以使用LINQ查询表达式。它们是一种句法特征。您错过的是LINQ到对象、LINQ到XML和朋友。看看LinqBridge。@Matt:可能是这样,但CLR是新的,这并不强制禁止使用编译器独有的功能,就像使用AutoProperty和target.NET 1.1Great answer一样,但我想我想知道的是,C#4.0中的哪些功能不依赖.Net 4.0的功能。这太棒了。Ed关于“通用差异”的帖子中的一个重要观点是,如果您的目标是3.5,
IEnumerable
将不会参与差异功能,因此,在您能够针对4.0运行时之前,您将无法摆脱所有恼人的
Cast
调用。@Earlz-这难道不是这个答案中的要点吗?Ed Maurer等了18个月才更新他的(非常有趣的)博客,这也值得称赞@丹尼尔,是的,但那是在。。还有一篇很好的博客文章。这基本上涵盖了所有的新功能吗?@Marc:你说的“锁更改”是什么。@Earlz-看链接;类似于字段的事件实现已经完成changed@Martinho