Generische Variablen aus einem Typ erstellen - wie? Oder verwenden Sie Activator.CreateInstance () mit Eigenschaften {} anstelle von Parametern ()?

Ich verwende derzeit Generics, um einige dynamische Methoden zu erstellen, z. B. ein Objekt zu erstellen und die Eigenschaften mit Werten zu füllen.

Gibt es eine Möglichkeit, das Generic "dynamisch" zu erstellen, ohne den Typ zu kennen? Zum Beispiel:

List<String> = new List<String>()

ist ein vorgegebener Weg, aber

List<(object.GetType())> = new List<(object.GetType()>()

funktioniert nicht ... Aber kann es?

Das funktioniert nicht (Gibt es einen ähnlichen Ansatz, der funktioniert?)

    public T CreateObject<T>(Hashtable values)
    {
        // If it has parameterless constructor (I check this beforehand)
        T obj = (T)Activator.CreateInstance(typeof(T));

        foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties())
        {
            // Specifically this doesn't work
            var propertyValue = (p.PropertyType)values[p.Name];
            // Should work if T2 is generic
            // var propertyValue = (T2)values[p.Name];

            obj.GetType().GetProperty(p.Name).SetValue(obj, propertyValue, null);
        }
    }

Kurz gesagt: Wie kann man einen "Typ" nehmen und daraus ein Objekt erstellen, ohne Generics zu verwenden? Ich habe bisher nur Generics in Methoden verwendet, aber ist es möglich, die gleiche Methode für Variablen zu verwenden? Ich muss vor der Methode ein Generic (T) definieren. Kann ich das auch für Variablen tun, bevor ich sie "erstelle"?

... oder wie man mit "Activator" ein Objekt mit Eigenschaften anstelle von Parametern erstellt. So wie du es hier tust:

// Mit Parameterwerten

Test t = new Test("Argument1", Argument2);

// Mit Eigenschaften

Test t = new Test { Argument1 = "Hello", Argument2 = 123 };

Antworten auf die Frage(3)

Ihre Antwort auf die Frage