我想将类的属性重置为类的方法中的默认值。我的类被实例化一次(实际上是MVVM框架中的ViewModel)并且我不想破坏和重新创建整个ViewModel,只是清除了许多属性。以下代码就是我所拥有的。我唯一缺少的是如何获取SetValue方法的第一个参数 - 我知道它是我正在设置的属性的一个实例,但我似乎无法弄清楚如何访问它。我收到错误:“对象与目标类型不匹配”。
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);
}
}
}
...
...
}
答案 0 :(得分:3)
您应该传递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);
}
}
}
...
...
}
答案 1 :(得分:1)
您应该将this
作为第一个参数。请参阅MSDN以获取参考:
objType:System.Object
将设置其属性值的对象。