2012-11-06 64 views
5

考慮下面的代碼示例,其中ConcreteBase派生被用作類型參數有編譯錯誤,我已經檢查過泛型參數是可分配給Concrete類型的。所以理論上我相信應該有一種方法來創建一個Bar類的實例。類型「T」不能在通用類型或方法錯誤,當類型是已知的

有沒有什麼辦法可以消除編譯錯誤?我想不出一個辦法來表明論點。編譯錯誤的


全文:

Error 14 The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Bar'. There is no implicit reference conversion from 'T' to 'Concrete'.

+1

這是爲我編譯的...是* actual *示例?你的真實代碼中是否有參數? –

+1

您的代碼與錯誤消息不符。當然你寫了'Bar ();' –

+0

Foo沒有'Where T:Concrete'的理由嗎? – Servy

回答

4

編譯器有沒有辦法知道,T,這是目前制約到基本實際上是混凝土,並且,即使你之前對其進行測試。

所以:

Type type = typeof(Bar<>); 
Type generic = type.MakeGenericType(typeof(T)); 
var x = Activator.CreateInstance(generic); 

不要讓它這樣做的機會。

相關問題