我处理的代码比较C#中的类结构作为序列化库的一部分。
我偶然发现了特定泛型类设置的问题:
class B<Y> where Y: B<Y> {}
class A<X>: B<A<X>> {}
我已经有Type
类型的对象代表 open 泛型类型B<>
和 open 泛型类型A<>
。现在我想创建 open 泛型类型B<A<>>
,我将其用作其他已关闭泛型类型的模板。为此,我尝试使用MakeGenericType
方法:
typeof(B<>).MakeGenericType(typeof(A<>))
但最终出现了“无效的通用参数”的例外情况。这是有道理的,因为类型A<>
不符合Y
泛型参数的约束。
我知道我可以通过调用typeof(A<>).BaseType
来获取我想要的类型,但它不符合我的算法流程,似乎不是解决问题的一般方法。我的问题是:有没有办法创建一个打开类型B<A<>>
忽略/推迟约束检查到创建已关闭它的版本?