0

我想在类的方法中将类的属性重置为默认值。我的类被实例化一次(实际上是一个 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);
      }
    }

  }

  ...
  ...


}
4

2 回答 2

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);
      }
    }

  }

  ...
  ...

}
于 2013-04-19T21:12:40.553 回答
1

您应该将this其作为第一个参数。请参阅MSDN以供参考:

对象类型:System.Object

将设置其属性值的对象。

于 2013-04-19T20:54:33.750 回答