Konvertieren einer Zeichenfolge in einen Klassennamen
Habe ich eine string-variable steht für den Namen einer benutzerdefinierten Klasse. Beispiel:
string s = "Customer";
Werde ich brauchen, um erstellen Sie eine arraylist mit Kunden. So, die erforderliche syntax ist:
List<Customer> cust = new ..
Wie wandle ich den string s in der Lage sein diese zu erstellen arraylist Laufzeit?
Kommentar zu dem Problem
John, es gibt keine generische Implementierung der ArrayList-Klasse in der .NET-framework. Bob, das ist out of scope für die Frage, aber wenn Sie programming in C# 2.0+ haben, sollten Sie ersetzen die ArrayList für etwas generisch.
InformationsquelleAutor der Frage Bob Smith | 2009-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, für eine Sache
ArrayList
ist nicht generischen... meinst duList<Customer>
?Können Sie
Type.GetType(string)
um dieType
verknüpfte Objekt mit einem Typ, der durch den Namen. Wenn die assembly ist nicht entweder mscorlib oder von der aktuell ausgeführten Art, müssen Sie lediglich den Namen der assembly. So oder so müssen Sie den namespace zu.Sind Sie sicher, dass Sie wirklich brauchen, einen generischen Typ? Generika meist bieten compile-Zeit Art Sicherheit, die du ganz offensichtlich nicht viel von, wenn Sie finden, der Typ an der Ausführung. Sie kann finden es nützlich, und zwar...
Wenn Sie brauchen, um tun alles, was Sie mit dieser Liste, können Sie auch mehr tun müssen, generischen Reflexion obwohl... wie z.B. der Aufruf einer generischen Methode.
InformationsquelleAutor der Antwort Jon Skeet
Dies ist eine Reflexion Frage. Sie müssen feststellen, dass die Art dann instanziieren eine Instanz, so etwas wie dieses:
oder CreateInstance(assemblyName, className)
Müssen Sie aufpassen, für namespace/Typ Auseinandersetzungen zwar nicht, aber das wird der trick für ein einfaches Szenario.
Auch, wickeln, dass in einem try/catch! Activator.CreateInstance ist beängstigend!
InformationsquelleAutor der Antwort pezi_pink_squirrel