Hallo Community,
ich habe eine Variable 't' vom Type 'System.Type' und möchte zur Laufzeit eine entsprechende generische Liste erstellen. Nur wie mache ich das eigentlich - new List<t.GetType()> geht ja nicht... Vorschläge?
Gruß
Hallo,
guck mal das Beispiel an:
// Basistyp erstellen:
Type baseType = typeof(List<>);
// Typargumente erstellen:
Type[] typeArgs = { typeof(string) };
// Generischen Typ erstellen:
Type genericType = baseType.MakeGenericType(typeArgs);
// Objekt erstellen:
object o = Activator.CreateInstance(genericType);
List<string> list = o as List<string>;
Console.WriteLine(list == null ? "Fehler" : "Erfolg");
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Ich würde es wie folgt machen, hat den vorteil, dass man aucgh gleich damit arbeiten kann (nichtnur als objekt).
object myMethod<T>()
{
List<T> list=new List<T>();
dosomthing(list);
return list;
}
....
//code zum Aufrufen sieht so aus:
//methode finden
MethodInfo myMethodInfo=typeof(AktuelleKlasse).GetMethod("myMethod",BindingFlags.Instance|BindingFlags.NonPublic);
//generisch machen
myMethodInfo=myMethodInfo.MakeGenericMethod(new Type[1]{t});
//delegate erstellen (man könnte MethodInfo.Invoke benutzen, das ist aber saulahm und lässt sich schlecht debuggen)
Func<object> myMethodDelegate=Delegate.CreateDelegate(typeof(Func<object>),this,myMethodInfo);
//aufrufen
object liste=myMethodDelegate();
@gfoidl,
Danke, funktioniert prima!
@Floste
hatte vergessen zu erwähnen dass ich mitm .NET Framework 2.0 arbeite 😦 Trotzdem vielen Dank