2017-04-05 10 views
0

C#의 클래스 구조를 serialization 라이브러리의 일부로 비교하는 코드를 작업합니다. 리플렉션을 사용하여 열린 제네릭 형식을 만들 때 제약 조건을 무시합니다.

나는 특정 제네릭 클래스 설정에 문제가 우연히 :

class B<Y> where Y: B<Y> {} 
class A<X>: B<A<X>> {} 

이미 공개 제네릭 형식 B<>공개 제네릭 형식 A<>를 표시하는 유형 Type의 개체가. 이제 일반 유형 B<A<>>을 작성하여 다른 제네릭 유형에 대한 템플릿으로 사용하겠습니다.

typeof(B<>).MakeGenericType(typeof(A<>)) 

하지만 "잘못된 일반적인 인수"에 대한 예외으로 돌아가 셨습니다 : 나는 MakeGenericType 방법을 사용하여 시도 그렇게하기 위해서. A<> 유형이 Y 제네릭 인수의 제한 조건을 충족시키지 않아서 의미가 있습니다.

typeof(A<>).BaseType을 호출하여 원하는 유형을 얻을 수 있다는 것을 알고 있지만 알고리즘에 맞지 않으며 문제의 일반적인 해결책이 아닌 것 같습니다. 내 질문은 : 거기에 열기 유형 B<A<>>무시/지연닫는 버전을 만드는 순간에 제약 검사를 만들 수있는 방법은 무엇입니까?

+0

잘 모르겠다. 그런 능력을 사용하면 API에서 사용할 가치가없는 틈새가 될 것으로 생각된다. –

+1

코드를 복사하여 복사하여 실행하면 정상적으로 작동합니다. 결과는'B \'1 [A \'1 [X]]'입니다. https://dotnetfiddle.net/qR9uAs – thehennyy

+0

@thehennyy Thanks! 당신 말이 맞아요. 괜찮아.하지만 ... 모노는 아니야. 내 질문에 언급하지 못했습니다 및 게시하기 전에 .NET에서 코드를 테스트하지 못했습니다. – houen

답변

0

@thehennyy의 의견에 감사 드리며, Linux Mono 4.8.0의 버그입니다. 나는 그것을 here이라고보고하고 반응을 기다린다.