Sie können nicht direkt. Der Sinn von Generika besteht darin, Sicherheit für Kompilierungszeiten zu bieten , bei der Sie den Typ kennen, an dem Sie zur Kompilierungszeit interessiert sind, und mit Instanzen dieses Typs arbeiten können. In Ihrem Fall kennen Sie nur das, Type
sodass Sie keine Überprüfungen zur Kompilierungszeit erhalten können, ob Objekte, die Sie haben, Instanzen dieses Typs sind.
Sie müssen die Methode über Reflection aufrufen - ungefähr so:
// Get the generic type definition
MethodInfo method = typeof(Session).GetMethod("Linq",
BindingFlags.Public | BindingFlags.Static);
// Build a method with the specific type argument you're interested in
method = method.MakeGenericMethod(typeOne);
// The "null" is because it's a static method
method.Invoke(null, arguments);
Wenn Sie diesen Typ häufig verwenden müssen, ist es möglicherweise bequemer, eine eigene generische Methode zu schreiben, die alle anderen generischen Methoden aufruft, und dann Ihre Methode mit Reflexion aufzurufen .
IQueryable
was Sie brauchen?Dazu müssen Sie Reflection verwenden:
(vorausgesetzt, dies
Linq<T>()
ist eine statische Methode für den TypSession
)Wenn
Session
es sich tatsächlich um ein Objekt handelt , müssen Sie wissen, wo dieLinq
Methode tatsächlich deklariert ist, undSession
als Argument übergeben:quelle
quelle