Der Typ 'T' kann nicht verwendet werden, die als Typ-parameter im generischen Typ oder Methode Fehler, wenn der Typ bekannt ist
Betrachten Sie das folgende Codebeispiel, wo Concrete
stammt aus Base
:
class Base{}
class Concrete : Base {}
static void Foo<T>() where T : Base
{
if (typeof(Concrete).IsAssignableFrom(typeof(T)))
{
var x = new Bar<T>(); //compile error on this line
}
}
class Bar<T> where T : Concrete
{
}
Auf die Zeile, wo ich bin mit dem kompilieren Fehler, ich habe bereits überprüft, dass das generische argument zuweisbar ist der Concrete
geben. So in der Theorie glaube ich es sollte eine Möglichkeit zum erstellen einer Instanz der Bar Klasse.
Gibt es eine Möglichkeit, ich kann entfernen Sie die Kompilier-Fehler? Ich kann mir nicht vorstellen Weg zu werfen das argument.
Full text kompilieren-Fehler:
Fehler 14 Der Typ 'T' kann nicht verwendet werden, die als Typ-parameter " T " in der
generischen Typ oder Methode
'Bar'. Es
ist keine implizite Referenz Konvertierung von 'T' zu
'Beton'.
Dein code passt nicht zu der Fehlermeldung. Sicher, man schrieb
Bar<T>();
Gibt es einen Grund, dass Foo nicht
where T : Concrete
?während der Bearbeitung möchten Sie vielleicht auch, um die Beziehung zu klären zwischen
Base
und Concrete
vielen Dank; mit dieser änderung: es gibt keinen regulären Weg, das zu tun. Sie können es zu hacken mit Reflexion (
MakeGenericMethod
etc), aber das ist nicht ein guter Antwort. Wenn Sie können, entfernen Sie die Einschränkung aus Bar<T>
und einige casting (über object
) innerhalb Bar<T>
, , funktionieren könnte.InformationsquelleAutor Zaid Masud | 2012-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der compiler hat keine Möglichkeit zu wissen, dass T, die derzeit Einschränkung auf Basis tatsächlich Konkrete, und, dass, selbst wenn man Sie vorher testen.
Also:
Lassen Sie nicht die chance, es zu tun.
InformationsquelleAutor LightStriker