0
我使用將C#中的類的結構作爲序列化庫的一部分進行比較的代碼。使用反射創建開放泛型類型時忽略約束條件
我偶然發現了一個問題與特定的通用類設置:
class B<Y> where Y: B<Y> {}
class A<X>: B<A<X>> {}
我已經有Type
型代表開放泛型類型B<>
和開放泛型類型A<>
的對象。現在我想創建開放通用類型B<A<>>
,我將用作其他關閉通用類型的模板。爲了做到這一點我嘗試使用MakeGenericType
方法:
typeof(B<>).MakeGenericType(typeof(A<>))
,但它結束了關於「無效通用參數」的異常。這是合理的,因爲類型A<>
不符合Y
通用參數的約束。
我知道我可以通過調用typeof(A<>).BaseType
來獲得我想要的類型,但它不適合我的算法流程,似乎不是一個通用的解決方案。我的問題是:有沒有辦法創建一個開放類型B<A<>>
忽略/推遲約束檢查到創建時關閉它的版本?
不是我所知道的 - 我懷疑這樣一種能力的使用將會是如此微不足道,以至於它不值得在API中使用。 –
我複製了你的代碼來運行它,它對我來說工作正常。產生'B \'1 [A \'1 [X]]'。 https://dotnetfiddle.net/qR9uAs – thehennyy
@thehennyy謝謝!你是對的。它工作正常,但...不是在單聲道。我沒有在我的問題中提及它,並沒有在發佈之前在.NET上測試代碼。 – houen