2012-11-06 14 views
5

Rozważmy następujący kod przykładowy, gdzie Concrete pochodzi z Base:typu „T” nie może być stosowany jako parametr typu w ogólnym typie lub błędu metody, gdy typ jest znany

na linii, gdzie jestem mając błąd kompilacji, już sprawdziłem, czy ogólny argument można przypisać do typu Concrete. Tak więc teoretycznie uważam, że powinien istnieć sposób tworzenia instancji klasy Bar.

Czy istnieje sposób usunięcia błędu kompilacji? Nie mogę wymyślić sposobu, by rzucić kłótnię.


Pełny tekst kompilacji błędu:

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

To dla mnie kompilacja ... czy to jest * rzeczywisty * przykład? czy są jakieś parametry w twoim prawdziwym kodzie? –

+1

Twój kod nie pasuje do komunikatu o błędzie. Na pewno napisałeś 'Bar ();' –

+0

Czy istnieje powód, dla którego Foo nie ma 'where T: Concrete'? – Servy

Odpowiedz

4

Kompilator nie ma sposobu, aby wiedzieć, że T, który jest obecnie ograniczenie do Bazy jest rzeczywiście betonu, a nawet jeśli go przetestować wcześniej.

Więc:

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

Nie pozwól to szansa, aby to zrobić.

Powiązane problemy