В настоящее время я использую 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 };