使用.NET中的反射在对象上设置字段,该对象是类中的属性

时间:2010-12-02 20:55:50

标签: .net reflection

我有以下类结构(伪代码):

Class A
{
  Property string Who;
  Property string Where;
}

Class B
{
  Property A Information;
}

Class C
{
   Property String Who;
}

我试图找出如何使用.NET 4.0中的反射设置集B.A.Who = C.Who

谢谢!

1 个答案:

答案 0 :(得分:3)

嗯,正确地执行排序并不是那么困难,但如果你想要参数验证,优雅的错误处理等,它会变得非常混乱。这是一个应该突出显示的例子技术(没有检查):

static void SetBsAsWhoToCsWho(object b, object c)
{
    // csWho = c.Who
    object csWho = c.GetType().GetProperty("Who").GetValue(c, null);

    // a = b.Information
    object a = b.GetType().GetProperty("Information").GetValue(b, null);

    // a.Who = csWho
    a.GetType().GetProperty("Who").SetValue(a, csWho, null);
}

您需要在上面的代码中进行各种检查才能使其健壮。如果您能告诉我们为什么您希望使用反射来完成此任务,那将非常有用。根据具体情况,可能会有更合适的解决方案,例如:

  1. 明显的类型安全代码。
  2. 根据需要进行投射,然后输入类型安全的代码。
  3. 通过构造和编译表达式树来生成委托。
  4. 使用dynamic
  5. AutoMapper和其他库。