2009-02-05 14 views
23

ich habe:Angeben generische Auflistung Typ param zur Laufzeit

class Car {..} 
class Other{ 
    List<T> GetAll(){..} 
} 

ich tun möchte:

Type t = typeof(Car); 
List<t> Cars = GetAll<t>(); 

Wie kann ich das tun?

Ich möchte eine generische Sammlung aus der Datenbank eines Typs zurückgeben, die ich zur Laufzeit durch Reflexion entdecken.

Antwort

25
Type generic = typeof(List<>);  
Type specific = generic.MakeGenericType(typeof(int));  
ConstructorInfo ci = specific.GetConstructor(Type.EmptyTypes);  
object o = ci.Invoke(new object[] { }); 
+4

Dieses ist nicht eine große Sache oder so etwas, aber Sie können Ihre leeren Typ Array ersetzen in GetConstructor mit Type.EmptyTypes geleitet wird. Nur ein bisschen sauberer, das ist alles. – Kilhoffer

8

Sie könnten Reflexion für diesen Einsatz:

Type t = typeof(Car); 
System.Type genericType= generic.MakeGenericType(new System.Type[] { t}); 
Activator.CreateInstance(genericType, args); 
Verwandte Themen