Ich versuche, Instanzen von Klassen mit String-Namen zu erstellen. Ich erstelle Dienstprogramm, wo Benutzer Typ aus dem Popup-Feld der Zeichenfolge (Inhalt dieses Feldes ist Inhalt der Feld "Typen") und ich muss Instanz der Klasse basierend auf seiner Wahl zu erstellen. Leider weiß ich nicht, wie man es machtInstanz für Zeichenfolge erstellen und zur Sammlung hinzufügen
class Parent
{
}
class Child1 : Parent
{
}
class Child2 : Parent
{
}
string[] types = { "Child1", "Child2" };
List<Parent> collection = new List<Parent>();
void Main()
{
Parent newElement = Activator.CreateInstance(this.types[0]) as Parent; // this row is not working :(and I dont know how to make it work
this.collection.Add(newElement);
if (this.collection[0] is Child1)
{
Debug.Log("I want this to be true");
}
else
{
Debug.Log("Error");
}
}
Ich Finnaly machen es funktioniert. Danke euch allen. Hier arbeitet Code (Problem in fehlenden Namensraum war)
namespace MyNamespace
{ Klasse Eltern {
}
class Child1 : Parent
{
}
class Child2 : Parent
{
}
class Main
{
string[] types = { typeof(Child1).ToString(), typeof(Child2).ToString() };
List<Parent> collection = new List<Parent>();
public void Init()
{
Parent newElement = Activator.CreateInstance(Type.GetType(this.types[0])) as Parent;
this.collection.Add(newElement);
if (this.collection[0] is Child1)
{
Debug.Log("I want this to be true");
}
else
{
Debug.Log("Error");
}
}
}
}
Wenn Sie s ay "diese Zeile funktioniert nicht", können Sie eine bestimmte Art und Weise identifizieren, in der es nicht funktioniert? Kompiliert es nicht, wirft es eine Ausnahme, gibt es null zurück, oder macht es nur das frowny Gesicht, das Sie in Ihrer Frage erwähnen? Haben Sie in MSDN das missmutige Gesicht nachgeschlagen und nachgesehen, ob etwas hilfreich ist? –
Diese Zeile funktioniert nicht vollständig (nicht kompilieren) Ich habe es hier nur zur Veranschaulichung angegeben, was ich versucht habe. Ich habe viel gegoogelt und festgestellt, dass dieses Problem von Activator.CreateInstance gelöst werden kann, aber ich kann es nicht funktionieren lassen. Derzeit suche ich nach völlig neuen Ideen, wie ich mein Problem lösen kann. – MrIncognito
Fügen Sie den 'namespace' in Ihren Code ein, weil Sie das nicht sehen. – muratgu