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

将delegate定义放在其他项目中会编译失败?分享

时间:2023-04-11 01:02:19 C#

delegate定义放在其他项目编译失败?更新:我已将此问题作为MicrosoftConnect上的问题提交,如果您可以重现此问题和/或希望看到此问题已得到修复,请在此处为该问题投票以提供帮助。几个小时以来,我一直在努力解决这个问题。非常感谢您能想到的任何想法/建议。首先,我有3个文件Class.csDefinitions.cs和Program.cs。我已将文件内容粘贴到http://pastie.org/1049492供您尝试。问题是,如果您在同一个控制台应用程序项目中拥有所有3个文件。该应用程序编译并运行得很好。但是,如果我在从只有Program.cs文件的主控制台应用程序项目引用的“库”项目中有Class.cs和Definitions.cs,则编译失败:这是一个完整的3个项目解决方案-1把所有文件和另一个项目中的另一个项目:http://dl.dropbox.com/u/149124/DummyConsole.zip我正在使用VS2010RTWProfessional。有趣的。我认为您已经在C#编译器中发现了一个真正的错误——尽管我可能遗漏了一些细微的东西。我写了一个稍微简化的版本,避免了重载等的可能性,并省去了额外的方法://Definitions.cspublicinterfaceIData{}publicdelegateIDataFoo(IDatainput);公共委托IDataBar(IData输入,TextraInfo);公共委托FooProduce(Barnext);//Test.csclassTest{staticvoidMain(){Produceproduce=next=>input=>next(input,"Thisstringshouldappear.");Demo编译成一个程序集没有错误:>cscTest.csDefinitions.csDemo编译成两个程序集有错误:>csc/target:libraryDefinitions.cs>cscTest.cs/r:Definitions.dllTest.cs(5,43):错误CS1662:无法将lambda表达式转换为委托类型'Produce'因为块中的某些返回类型不能隐式转换为委托返回类型Test.cs(5,52):错误CS1593:委托'Bar'不接受2个参数我想不出任何理由为什么这在不同的程序集中应该不同,因为一切都是公开的。除了内部原因,该规范很少讨论程序集边界。有趣的是,我在使用C#3和4编译器时遇到了同样的错误。现在给Eric和Mads发电子邮件...编辑:请注意,您可以使用显式参数列表解决此问题。例如,在我的示例代码中,这将起作用:Produceproduce=(Barnext)=>input=>next(input,"Thisstringshouldappear.");我通过重命名C:\Windows\Microsoft.NETFrameworkv4.0.30319Microsoft.CSharp.targets(不要删除它!)来解决这个问题,这是输出窗口中的警告。新项目现在没问题,但是之前的项目加载失败。之后,我再次将文件重命名为原始名称。现在可以正确编译这两个项目。这是一个经验性的解决方案,但希望对你有所帮助如果分享的所有内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: