Erstellen von Klassen-Instanz von string
Habe ich eine C# - Methode legt eine neue Instanz einer Klasse aus einem string, allerdings bekomme ich eine Fehlermeldung wenn der code ausgeführt wird.
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
ArgumentNullException wurde nicht behandelte
Wert darf nicht null sein
Parameter name: Typ
Jede Hilfe zu diesem Fehler würde geschätzt.
- Gut... Macht die Klasse "classPrefix_????" gibt es? Wenn es Sie nicht Geben.GetType null zurück...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die assembly qualifizierten Namen als argument zu Geben.GetType
MSDN-Doc auf der assembly qualifizierte Namen
Namespace.className
Können Sie nur fehlt der namespace aus der classname
Funktioniert bei mir:
Ergebnis:
Die Klasse, die Sie suchen, müssen nicht definiert werden. Sind Sie sicher, dass Sie richtig eingegeben haben?
Werden Sie wahrscheinlich nicht haben eine Art von "classPrefix_" plus, was Sie haben className. Der Typ.GetType () - Aufruf null zurückgibt, und CreateInstance wirft die ArgumentNullException.
Dies ist, weil die
Type.GetType(classHere)
hat nichts gefunden, sind Sie sicher, dass der Klassenname Sie sind nach existiert? Denken Sie daran, es sollte als Präfix einen Namensraum, wenn möglich, und nicht in einem externen Montage, es sei denn, es ist bereits geladen in der App-Domäne.Sieht es aus wie
Type.GetType("classPrefix_" + className)
ist die Rückgabe null.Diese gibt null zurück, wenn Sie nicht finden können, der Typ. Ein paar mögliche Ursachen sind fehlende namespace, oder die assembly die Klasse noch nicht geladen ist.
In der Api-Dokumentation auf die Methode, die möglicherweise geben Sie einige weitere insite.
http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx
Es sieht aus wie Ihre
Type.GetType("classPrefix_" + className)
call ist wieder einnull
. Dies verursacht dieArgumentNullException
wenn an dieCreateInstance
Methode.Bewerten
"classPrefix_" + className
und überprüfen Sie, dass Sie haben eine Art genannt, was es ergibt.Sollten Sie auch angeben werden die AssemblyQualifiedName bei der Verwendung der Typ.GetType - Methode (ie. den vollqualifizierten Typnamen einschließlich den Namen der assembly und namespace).