c# – 如果将委托定义放在另一个项目中,则编译失败?

c# – 如果将委托定义放在另一个项目中,则编译失败?,第1张

概述更新:我已经提交了这个作为 an issue on Microsoft Connect,如果你可以重现这个和/或希望看到这个修复,请帮助在那里投票问题. 我一直试图解决这个问题几个小时了. 非常感谢您能想到的任何想法/建议. 首先,我有3个文件Class.cs Definitions.cs和Program.cs.我在http://pastie.org/1049492粘贴了文件内容供您试用. 问题是 更新:我已经提交了这个作为 an issue on Microsoft Connect,如果你可以重现这个和/或希望看到这个修复,请帮助在那里投票问题.

我一直试图解决这个问题几个小时了.
非常感谢您能想到的任何想法/建议.

首先,我有3个文件Class.cs DeFinitions.cs和Program.cs.我在http://pastie.org/1049492粘贴了文件内容供您试用.

问题是,如果在同一个控制台应用程序项目中有所有3个文件.应用程序编译并运行得很好.

但是,如果我在一个“库”项目中有Class.cs和DeFinitions.cs,它从只有Program.cs文件的主控制台应用程序项目中引用,则编译失败:

>代表法没有2个论点.
>无法将lambda表达式转换为委托类型’DC.lib.Produce’,因为块中的某些返回类型不能隐式转换为委托返回类型…

这是一个包含3个项目的完整解决方案 – 1个将所有文件组合在一起,另一个项目放在另一个项目中:
http://dl.dropbox.com/u/149124/DummyConsole.zip

我正在使用VS2010 RTW专业版.

解决方法 有趣.我认为你在C#编译器中发现了一个实际的错误 – 虽然我可能会遗漏一些微妙的东西.我写了一个稍微简化的版本,避免了重载等的可能性,并且省去了额外的方法:
// DeFinitions.cspublic interface IData { }public delegate IData Foo(IData input);public delegate IData bar<T>(IData input,T extraInfo);public delegate Foo Produce<T>(bar<T> next);// Test.csclass Test{    static voID Main()    {        Produce<string> produce =             next => input => next(input,"This string should appear.");    }    }

演示编译为一个程序集,没有错误:

> csc Test.cs DeFinitions.cs

演示编译为具有错误的两个程序集:

> csc /target:library DeFinitions.cs> csc Test.cs /r:DeFinitions.dllTest.cs(5,43): error CS1662: Cannot convert lambda Expression         to delegate type 'Produce<string>'        because some of the return types in the block are not         implicitly convertible to the delegate return typeTest.cs(5,52): error CS1593: Delegate 'bar' does not take 2 arguments

我想不出有什么理由为什么在不同的集会中这应该是不同的,因为一切都是公开的.除内部原因外,该规范很少讨论装配边界.

有趣的是,我对C#3和4编译器都有同样的错误.

现在通过电子邮件发送Eric和Mads ……

编辑:请注意,您可以使用显式参数列表解决此问题.例如,在我的示例代码中,这将起作用:

Produce<string> produce =    (bar<string> next) => input => next(input,"This string should appear.");
总结

以上是内存溢出为你收集整理的c# – 如果将委托定义放在另一个项目中,则编译失败?全部内容,希望文章能够帮你解决c# – 如果将委托定义放在另一个项目中,则编译失败?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249237.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存