我想初始化泛型类型的所有公共属性 我写了以下方法:
public static void EmptyModel<T>(ref T model) where T : new()
{
foreach (PropertyInfo property in typeof(T).GetProperties())
{
Type myType = property.GetType().MakeGenericType();
property.SetValue(Activator.CreateInstance(myType));//Compile error
}
}
但它有编译错误
我该怎么办?
答案 0 :(得分:5)
这里有三个问题:
PropertyInfo.SetValue
有两个参数,一个用于设置属性的对象的引用(或null
用于静态属性)`,以及设置它的值。 property.GetType()
将返回PropertyInfo
。要获取属性本身的类型,您需要使用property.PropertyType
代替。null
。我认为您正在寻找的是:
public static T EmptyModel<T>(ref T model) where T : new()
{
foreach (PropertyInfo property in typeof(T).GetProperties())
{
Type myType = property.PropertyType;
var constructor = myType.GetConstructor(Type.EmptyTypes);
if (constructor != null)
{
// will initialize to a new copy of property type
property.SetValue(model, constructor.Invoke(null));
// or property.SetValue(model, Activator.CreateInstance(myType));
}
else
{
// will initialize to the default value of property type
property.SetValue(model, null);
}
}
}