在构建旧的.NET Framework版本时使用较新的C#功能是否安全?

时间:2014-02-09 16:59:09

标签: c# .net visual-studio

我维护一个.NET 2.0库(目前使用Visual Studio 2013)。

我在库的代码上使用了代码检查工具,当工具建议使用??运算符或lambdas而不是某些代码时,我感到很惊讶。

当我应用建议的编辑时,我更加惊讶,之后成功构建了库。

为什么Target Framework设置为.NET Framework 2.0的库可以在其代码中使用C#的新功能构建?

在构建旧的.NET Framework版本时使用较新的C#功能是否安全?我的意思是,该库的用户只能使用.NET Framework 2.0,我希望他们能够使用该库,即使我在其代码中使用了lambdas。

2 个答案:

答案 0 :(得分:6)

.NET 2.0和C#2.0是两回事。在你的情况下,你可以很好地拥有一个.NET 2.0库(针对CLR 2.0)并使用支持例如lambda表达式的C#3.0编译器。

因此,您应该在编译器版本和要定位的CLR版本之间做出改变。由于您使用的是VS 2013,因此可以使用较新版本的编译器。

  

在构建旧的.NET Framework版本时使用较新的C#功能是否安全?

是的,非常安全。生成的程序集仍然以CLR 2.0为目标,并且在旧版本的CLR上运行时没有任何问题。

答案 1 :(得分:4)

基本上,新的C#语言功能可以在编译器中实现,而无需扩展底层的.net框架。它并不总是这样,但它可能是。

在lambdas的情况下,它们是在C#3.0中引入的。所以你需要一个或那个级别的编译器。但是,C#3.0中引入的新功能都是使用.net 2.0的功能构建的。所以你可以在.net 2.0下使用lambdas。

实质上,这里的新功能是在编译器而不是框架中实现的。

对于null-coalescing运算符??,它是在C#2.0中引入的,因此能够在.net 2.0下使用它并不奇怪。