我有一些 C# 代码,可以在 mono 和 Microsoft 的 .net 编译器下编译良好,但只能在 mono 上运行。
错误消息是(我添加的换行符)
Unhandled Exception: System.TypeLoadException:
Could not load type 'Hasse.Groups.Heavy.Product.PowerGroup`1'
from assembly 'Hasse, Version=1.0.x.y, Culture=neutral, PublicKeyToken=null'
because it has recursive generic definition.
该类型实际上有一个递归通用定义,所以我的问题是:为什么它可以与 mono 一起使用? [代码运行并产生预期结果]
完整的源代码在这里:https://github.com/miniBill/Hasse https://github.com/miniBill/Hasse
仍然崩溃的精简代码如下:
public class Group<T> : IWrappableGroup<WrapperGroup<T>> {}
public class WrapperElement<T> {}
public interface IWrappableGroup<U> {}
public class WrapperGroup<T> : Group<WrapperElement<T>> {}
class MainClass {
public static void Main(string[] args){
var ng = new Group<object>();
}
}
这是它在单声道上工作的证据:http://ideone.com/ZvA3I http://ideone.com/ZvA3I
这是一个known https://connect.microsoft.com/VisualStudio/feedback/details/679421/generic-defintion-causes-system-typeloadexception问题。它可能会被报告为编译器错误。
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf(第 129 页)
至于在 Mono 中工作,就规范而言,Mono 工作有几个地方“被破坏”。
(递归 lambda https://stackoverflow.com/questions/1079164/c-recursive-functions-with-lambdas/1079609#1079609是另一个在 Mono 中工作但不应该工作的例子)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)