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

为什么这个代码不能用VS 4.0在VS2010中编译?分享

时间:2023-04-10 19:57:20 C#

undefinedundefined使用系统;使用System.Linq;namespaceConsoleApplication1{publicstaticclassProgram{publicstaticvoidMain(){Foofoo=newFoo();String[]names=newString[]{“你好”};Console.WriteLine(String.Join(",",names.Select(name=>foo.GetName(name))));}}publicclassFoo{}publicstaticclassExtensions{publicstaticStringGetName(thisFoofoo,Stringname){returnname;}}}看起来这是在c#4编译器中修复的错误。Console.WriteLine(string.Join(",",names.Select(foo.GetName)));是语法糖Console.WriteLine(string.Join(",",names.Select(newFunc(foo.GetName)))));即使foo.GetName是一种扩展方法。后者在VS2010中工作,前者没有。在讨论方法的隐式转换时,C#LanguageSpecification的6.6节描述了转换发生的过程,而不是说:注意如果§7.6.5.1的算法未能找到实例方法但成功处理了E(A)调用作为扩展方法调用,则此过程会导致为扩展方法创建委托(§7.6.5.2)。这样创建的委托捕获扩展方法及其第一个参数。基于此,我完全希望这条线适用于VS2010和VS2012(因为规范中的措辞没有改变),但事实并非如此。所以我推断这是一个错误。undefinedned字符串并显示它L_0033:callvoid[mscorlib]System.Console::WriteLine(string)//方法完成L_0038:ret如您所见,委托是从对象实例(foo)和方法指针创建的,它正是在VS2010中应该发生的情况是,如果您明确指定委托来创建newFunc(foo.GetName)。以上是C#学习教程:为什么这段代码在VS2010和VS4.0下编译不通?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: