C#中递归泛型类型的问题

14

我有一些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>();
    }
}

这里有一个证明它在mono上能工作的链接:http://ideone.com/ZvA3I


11
与其给我们一个大型项目的链接,如果您能发布一个简短(最小化)但是完整的示例来演示问题,那将非常有用。 - Jon Skeet
1
我已经成功将其进一步减少了一点点...如果我编辑一下你介意吗?(我一直在尝试将其减少到真正的最小值...) - Jon Skeet
去试一试吧。我曾经尝试过让它更小,但是没成功 :) - miniBill
仅有一个可执行语句。 - Jon Skeet
哇 :O 已将 ideone 链接更改为新的 poc。 - miniBill
显示剩余3条评论
1个回答

6

谢谢。虽然我怀疑它在Mono中的工作原理与递归lambda函数相同:它可能会出问题,但也可能是有意义的(就像我的代码一样)。 - miniBill
请您在 http://bugzilla.xamarin.com/ 上报“递归lambda”问题,好吗? - knocte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接