C#4.0和.Net 3.5

Dar*_*ung 29 .net c# .net-3.5

所以我们终于在一些开发者工作站上安装了VS2010并且可以使用C#4.0功能.虽然我们开发的大部分内容仍然必须暂时以.Net 3.5为目标.

当我启动一个新项目并将目标设置为.Net 3.5时,它仍然允许我使用C#4.0,如动态.因此,您可以在针对.net 3.5时使用C#4.0功能吗?这些功能是否可以在.Net 4.0不可用的环境中使用?

谢谢.

Aar*_*ght 44

dynamic 如果您的目标是.NET 3.5框架,代码将无法编译.

为了更清楚,编译器将允许您定义分配一个dynamic变量,如:

dynamic x = 3;
Run Code Online (Sandbox Code Playgroud)

那一行代码将被编译,因为dynamic就编译object而言只是编译.但是,如果您尝试对该变量执行任何操作,例如:

Console.WriteLine(x);
Run Code Online (Sandbox Code Playgroud)

...然后编译器必须生成代码来发现/强制实际类型,它不能做; 你会得到以下编译错误:

  1. 未定义或导入预定义类型"Microsoft.CSharp.RuntimeBinder.Binder"
  2. 无法找到编译动态表达式所需的一种或多种类型.您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用?

C#4编译器依赖于DLR,特别是Microsoft.CSharp程序集,用于与之相关的所有内容dynamic.这些在.NET 3.5中不可用.所以答案是否定的,您dynamic在定位Framework 3.5版时无法使用.

  • +1另一个解决方案,如果你搜索Aaronaught列出的2个错误消息,只是添加一个参考Microsoft.CSharp 4.0 (5认同)