目前我使用通用的常规来制造一些动态方法, 比如创建对象和填充属性中的值。
是否有办法“动态地”在不知道该类型的情况下创造通用的?例如:
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) ”, 所以在“ 生成” 变量之前,我可以对变量做同样的定义吗?
... 或如何使用“ 活动器” 来创建带有属性而非参数的对象。 如您在这里所做的 :
/ 带有参数值的参数值
Test t = new Test("Argument1", Argument2);
/ 有属性的 /
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };