c#反射,如何在类中获得属性实例来设置值
本文关键字:属性 实例 设置 反射 | 更新日期: 2023-09-27 18:10:08
我想在类的方法内将类的属性重置回其默认值。我的类被实例化一次(实际上是一个MVVM框架中的ViewModel),我不想破坏和重新创建整个ViewModel,只是清除了许多属性。下面的代码是我所拥有的。我唯一缺少的是如何获得SetValue方法的第一个参数-我知道它是我正在设置的属性的实例,但我似乎无法弄清楚如何访问它。我得到错误:"Object does not match target type".
public class myViewModel
{
...
...
public void ClearFields()
{
Type type = typeof(myViewModel);
PropertyInfo[] pi = type.GetProperties();
foreach (var pinfo in pi)
{
object[] attributes = pinfo.GetCustomAttributes(typeof(DefaultValueAttribute), false);
if (attributes.Length > 0)
{
DefaultValueAttribute def = attributes[0] as DefaultValueAttribute;
pinfo.SetValue(?, def.Value, null);
}
}
}
...
...
}
您应该传递一个myViewModel
的实例,在您的示例中使用this
来引用当前实例:
public class myViewModel
{
...
...
public void ClearFields()
{
Type type = typeof(myViewModel);
PropertyInfo[] pi = type.GetProperties();
foreach (var pinfo in pi)
{
object[] attributes = pinfo.GetCustomAttributes(typeof(DefaultValueAttribute), false);
if (attributes.Length > 0)
{
DefaultValueAttribute def = attributes[0] as DefaultValueAttribute;
pinfo.SetValue(this, def.Value, null);
}
}
}
...
...
}
您应该将this
作为第一个参数。参考MSDN:
objType:系统。对象
要设置其属性值的对象。