2012-11-06 7 views
5

Betrachten Sie das folgende Codebeispiel bekannt ist, wo Concrete von Base ableitet:Der Typ ‚T‘ kann nicht als Typ-Parameter in der generischen Art oder Methodenfehler verwendet werden, wenn Typ

Auf der Linie, wo ich bin Mit dem Kompilierfehler habe ich bereits überprüft, dass das generische Argument dem Typ Concrete zuweisbar ist. In der Theorie glaube ich, dass es eine Möglichkeit geben sollte, eine Instanz der Bar-Klasse zu erstellen.

Gibt es eine Möglichkeit, den Kompilierfehler zu entfernen? Ich kann mir keinen Weg vorstellen, dieses Argument zu formulieren.


Volltext der Kompilierung-Fehler:

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

Das kompiliert für mich ... ist das das * tatsächliche * Beispiel? Gibt es vielleicht Parameter in deinem echten Code? –

+1

Ihr Code stimmt nicht mit der Fehlermeldung überein. Sicher hast du geschrieben: Bar (); ' –

+0

Gibt es einen Grund, dass Foo nicht' wo T: Concrete' hat? – Servy

Antwort

4

Der Compiler hat keine Möglichkeit, zu wissen, dass T, die derzeit Zwang zur Basis ist eigentlich Beton ist, und dass selbst wenn Sie es vor dem Test.

So:

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

Lassen Sie es nicht die Möglichkeit, es zu tun.

Verwandte Themen