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'.

Das kompiliert bei mir... ist, dass das ist Beispiel? sind es vielleicht die Parameter in Ihrem code?
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

Schreibe einen Kommentar