C#学习教程:使用委托和Lambda的奇怪行为,参数对象[]参数);公共委托字符串MessageFormatterCallback(MessageFormatterDelegateformatterDelegate);和下一课的内容publicstaticclassTestClass{publicstaticstringEvaluate(MessageFormatterCallbackformatterCallback){return(formatterCallback);String}Format}但是,这表现得很奇怪:当从外部项目运行时,语句Console.WriteLine(TestClass.Evaluate(message=>message("{0},{1},{2}",1,2,3)));不编译,失败并出现错误Error1Delegate'MessageFormatterDelegate'doesnottake4argumentswhileConsole.WriteLine(TestClass.Evaluate((MessageFormatterDelegatemessage)=>message("{0},{1},{2}",1,2,3)));编译并工作正常,在控制台中打印1,2,3。为什么我必须在第二个lambda表达式中使用MessageFormatterDelegate类型来限定消息参数?有没有办法控制这种行为?编辑:好的,我现在有一个更短的例子和一个解决方法。第一个源文件,External.cs:publicdelegatestringCallback(System.Actionx);第二个源文件,Test.cs:classTest{staticvoidMain(){Callbackcallback=action=>action("hello");}}编译:>csc/target:libraryExternal.cs>cscTest.cs/r:External.cs错误:委托“action”不接受1个参数解决方法:将Main方法的主体更改为:Callbackcallback=action=>action.Invoke("你好");...或在使用它的同一个程序集中包含一个委托声明。这对我来说绝对是一个错误。当编译器知道foo的类型是特定的委托类型时,foo(arg)和foo.Invoke(arg)应该是等价的。正在向EricLippert发送邮件...更新:该错误已在C#5中修复。再次对给您带来的不便表示歉意,并感谢您的报告。这似乎是此处描述的已知错误的重复:'Delegate'System.Action'takesnoarguments。’这是C#编译器错误(lambdas+两项)吗?有关详细信息,请参阅我对该问题的回答,此处也有报道:C#ParserBugondelegates?这个错误是我的错;我为这个错误道歉。我们将尝试在C#5中修复它。如果您认为您确实发现了其他错误,请告诉我们,我们将开始调查。谢谢你的报告,我很感激。以上就是C#学习教程的全部内容:使用委托和Lambda的奇怪行为。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
