我目前正在使用泛型来创建一些动态方法,例如创建对象并为其属性填充值。
是否有办法“动态”创建泛型而不知道类型呢?例如:
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);
}
}
因此,简而言之:如何在不使用泛型的情况下从“类型”创建对象?到目前为止,我只在方法中使用了泛型,但是对于变量是否可以使用相同的方式呢?我必须在方法之前定义一个泛型(T),那么在“创建”它们之前,我能否在变量上执行相同的操作?
...或者如何使用“Activator”创建具有属性而不是参数的对象。就像你在这里做的一样:
// 带参数值
Test t = new Test("Argument1", Argument2);
//使用属性
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };