Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射创建打开的泛型类型时忽略约束_C#_Generics_Reflection_Mono - Fatal编程技术网

C# 使用反射创建打开的泛型类型时忽略约束

C# 使用反射创建打开的泛型类型时忽略约束,c#,generics,reflection,mono,C#,Generics,Reflection,Mono,作为序列化库的一部分,我编写了一段比较C#中类结构的代码 我偶然发现了特定泛型类设置的一个问题: class B<Y> where Y: B<Y> {} class A<X>: B<A<X>> {} 但它最终出现了一个关于“无效泛型参数”的例外。这是有意义的,因为类型A不满足Y泛型参数的约束 我知道我可以通过调用typeof(A).BaseType获得我想要的类型,但它不适合我的算法流程,似乎不是问题的一般解决方案。我的问题是:有没有

作为序列化库的一部分,我编写了一段比较C#中类结构的代码

我偶然发现了特定泛型类设置的一个问题:

class B<Y> where Y: B<Y> {}
class A<X>: B<A<X>> {}
但它最终出现了一个关于“无效泛型参数”的例外。这是有意义的,因为类型
A
不满足
Y
泛型参数的约束


我知道我可以通过调用
typeof(A).BaseType
获得我想要的类型,但它不适合我的算法流程,似乎不是问题的一般解决方案。我的问题是:有没有办法创建一个开放类型
B
忽略/延迟约束检查,直到创建一个封闭版本的那一刻?

感谢@thehenny的评论,我验证了这是Linux Mono 4.8.0中的一个bug。我报告了它并等待反应。

我不知道-我怀疑这种能力的使用太过利基,不值得在API中使用。我复制了你的代码来运行它,它对我来说很好。导致
B`1[A`1[X]]
@谢谢!你是对的。它很好用,但是。。。不是单声道的。我没有在问题中提到它,也没有在发布之前在.NET上测试代码。
typeof(B<>).MakeGenericType(typeof(A<>))