C # verwendet System.Type als generischen Parameter
Habe ich eine Liste von Typen (System.Typ) te abgefragt werden, die auf die Datenbank.
Für jede dieser Arten, muss ich anrufen die folgenden extensionmethod (das ist Teil der LinqToNhibernate):
Session.Linq<MyType>()
Allerdings habe ich nicht MyType, aber ich will einen Typ statt.
Was ich habe ist:
System.Type typeOne;
Aber ich kann nicht führen Sie die folgenden:
Session.Linq<typeOne>()
Wie kann ich einen Typ als Generischer parameter?
InformationsquelleAutor der Frage Jan | 2011-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht, direkt. Der Punkt, der Generika ist compile-Zeit geben Sicherheit, wo Sie wissen, der Typ, den Sie interessiert sind, zur compile-Zeit, und die mit Instanzen dieses Typs. In Ihrem Fall, Sie kennen nur die
Type
so können Sie keinen compile-Zeit überprüft, dass alle Objekte, die Sie haben, sind Instanzen dieses Typs.Müssen Sie rufen Sie die Methode per reflection - so etwas wie dieses:
Wenn Sie brauchen, um diese Art eine Menge, könnten Sie finden es bequemer, schreiben Sie Ihre eigene generische Methode, die fordert, was andere generische Methoden, die es braucht, und dann rufen Sie Ihre Methode mit Reflexion.
InformationsquelleAutor der Antwort Jon Skeet
Dies zu tun, müssen Sie mit reflection:
(unter der Annahme, dass
Linq<T>()
ist eine statische Methode, die auf der ArtSession
)Wenn
Session
ist eigentlich ein Objekt, müssen Sie wissen, wo dieLinq
Methode ist eigentlich erklärt, und übergeben SieSession
als argument:InformationsquelleAutor der Antwort Marc Gravell