我有一些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

仍会崩溃的简化代码在这里:
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

最佳答案

这是known问题。它可能被报告为编译器错误。

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf(第129页)

至于在Mono中的工作,就规范而言,在几个地方Mono的工作都被“破坏了”。

(Recursive lambdas是在Mono中不起作用的某些示例的另一个示例)

关于c# - C#中的递归泛型类型的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11295945/

10-17 02:39