我维护一个.NET 2.0库(目前使用Visual Studio 2013)。
我在库的代码上使用了代码检查工具,当工具建议使用??
运算符或lambdas而不是某些代码时,我感到很惊讶。
当我应用建议的编辑时,我更加惊讶,之后成功构建了库。
为什么Target Framework
设置为.NET Framework 2.0
的库可以在其代码中使用C#的新功能构建?
在构建旧的.NET Framework版本时使用较新的C#功能是否安全?我的意思是,该库的用户只能使用.NET Framework 2.0,我希望他们能够使用该库,即使我在其代码中使用了lambdas。
答案 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下使用它并不奇怪。