Criando variáveis ​​genéricas de um tipo - como? Ou use Activator.CreateInstance () com propriedades {} em vez de parameters ()?

Atualmente, estou usando o Generics para criar alguns métodos dinâmicos, como criar um objeto e preencher as propriedades com valores.

Existe alguma maneira de "dinamicamente" criar o genérico sem saber o tipo? Por exemplo:

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

é uma maneira definida, mas

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

não está funcionando ... Mas pode?

Isso não está funcionando (existe uma abordagem semelhante que funciona?)

    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);
        }
    }

Então, resumindo: como pegar um "Type" e criar um objeto sem usar Generics? Eu usei apenas Generics em métodos até agora, mas é possível usar da mesma maneira em variáveis? Eu tenho que definir um genérico (T) antes do método, então posso fazer o mesmo em variáveis ​​antes de "criá-las"?

... ou como usar o "Ativador" para criar um objeto com Propriedades em vez de Parâmetros. Como você faz aqui:

// Com valores de parâmetros

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

// Com propriedades

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

questionAnswers(3)

yourAnswerToTheQuestion