当前位置: 首页 > 编程语言 > C#

为什么不同版本的VisualStudio对同样的代码输出不同的结果?分享

时间:2023-04-10 12:25:59 C#

为什么同一个代码不同版本的VisualStudio输出结果不同?我使用的是.NET4(不是.NET4.5或任何其他版本的框架!)为什么不同版本的VisualStudio使用相同的.NET框架对相同的代码输出不同的结果?我有以下staticvoidMain(string[]args){varvalues=newList(){1,2,3,4,5};varfuncs=newList();foreach(varvinvalues){funcs.Add(()=>v*10);}foreach(varfinfuncs){Console.WriteLine(f());}控制台.ReadKey();在VisualStudio2013中,输出为1020304050(目标.NETv==4)。在VisualStudio2010中,输出为5050505050(目标.NETv==4)。哪里有问题?如何识别每个Studio用于.NET4C:\Windows\Microsoft.NETFrameworkv4.0.30319>csc/的C#(不是.NET!)版本?适用于Microsoft(R).NETFramework4.5C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0VC>csc/?适用于Microsoft(R).NETFramework4.5C:\ProgramFiles(x86)MicrosoftVisualStudio12.0>csc/?Microsoft(R)VisualC#CompilerVersion12.0.30110.0ForC#5Edit我可以说VS2010==C#4VS2013==C#5这与具体解决方案的目标框架无关吗?来自EricLippert的博客文章:在C#5中,foreach的循环变量在逻辑上将位于循环内部,因此闭包每次都会关闭变量的新副本。引用自MSDN:VisualStudio2010不允许您在C#5中进行开发。新的C#5语言功能是编译器的一部分,将包含在VisualStudio2012编译器中。即使安装了.NET4.5,它也不会让您利用该语言的新功能(例如async/await),因为这些功能需要使用新的编译器。VS2013仅适用于C#5.0编译器,您可以针对各种.NET框架。因此,您可以使用async/await之类的东西来获得C#5.0功能,并且仍然以.NET4.0为目标。以上是C#学习教程:为什么不同版本的VisualStudio对同样的代码输出不同的结果?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: