Создание универсальных переменных из типа — как? Или использовать Activator.CreateInstance() со свойствами { } вместо параметров ( )?

В настоящее время я использую Generics для создания некоторых динамических методов, таких как создание объекта и заполнение свойств значениями.

Есть ли способ «динамически» создать Generic, не зная его типа? Например:

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

— предустановленный способ, а

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

не работает... А может ли?

Это не работает (Есть ли подобный подход, который работает?)

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

Итак, вкратце: как взять «Тип» и создать из него объект без использования дженериков? До сих пор я использовал Generics только в методах, но можно ли использовать то же самое для переменных? Я должен определить Generic (T) перед методом, поэтому могу ли я сделать то же самое с переменными перед их «созданием»?

...или как использовать "Активатор" для создания объекта со Свойствами вместо Параметров. Как здесь:

// Со значениями параметров

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

// Со свойствами

Test t = new Test { Argument1 = "Hello", Argument2 = 123 };
6
задан Adi Lester 16 January 2016 в 13:15
поделиться