动态关键字问题

Sao*_*Ali 10 .net c# dynamic

请告诉我在哪个版本中引入了动态关键字?我在VS2010中发现了奇怪的行为.我将目标框架设置为3.5.但是没有编译器错误.只需将目标框架的控制台应用程序创建到.net 3.5并使用dynamic关键字.

Tim*_*oyd 14

动态类型是在.Net 4.0中引入的.

动态类型不是仅语言特性(即编译器纯粹支持).它依赖于DLR,这是一个需要库支持的.Net 4.0特性.

您不能使用动态和目标.Net 3.5框架.


dec*_*one 11

使用时Visual Studio 2010,默认为C# 4.0.

您不能使用C# 3.0Visual Studio 2010.

即使你的目标.Net Framework 3.5,它只会使用Framework 3.5而不是C# 3.0.

现在,因为它默认为C# 4.0,你可以使用dynamic.但为了工作,你必须参考Microsoft.CSharp.dll.该汇编编译为v 4.0.你不能在下面使用它v 3.5.

dynamicDLR (Dynamic Language Runtime)以前的框架版本不存在的需求.

这就是为什么当你尝试dynamicFramework 3.5项目中使用时,它会吓坏.

所以,总结一下,使用dynamic,使用Framework 4.0.

  • 没有"C#3.5"这样的东西..NET 3.5引入了C#3.0. (2认同)

Vin*_*ayC 10

动态关键字是作为C#4.0语言的一部分引入的 - 编译器随VS 2010一起提供.它是一种语言特性,不需要运行时支持(AFAIK)因此一旦符合C#4.0编译器,就不应该对早期版本的运行时有任何问题.在VS 2010中更改目标框架不切换编译器(它保持在4.0) - 只有在使用功能,针对新库或运行时,我们会收到编译错误.例如,在VS 2008中,你可以使用lambda表达式或var关键字为目标运行时2.0,但扩展方法是不可用,因为扩展属性是3.5组件的一部分.

编辑:上面的错误 - 动态关键字需要Framework 4.0.当目标fx改为3.5时,我甚至无法在VS2010中编译.我相信OP可能以后没有在代码中使用动态var,因此编译器优化会删除它,使OP相信它的工作.

  • 动态类型不是仅语言功能,DLR支持.Net 4. (5认同)
  • 这个答案似乎不正确... @saokat:这段代码:`dynamic x = 10; x.ToString();`give:Program.cs(12,4):error CS1969:找不到编译动态表达式所需的一个或多个类型.您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用? (3认同)
  • @lambert我同意 - 接受的答案是不正确的. (3认同)