使用.NET中的反射在类中作为属性的对象上设置字段

使用.NET中的反射在类中作为属性的对象上设置字段,.net,reflection,.net,Reflection,我有以下类结构(伪代码): 我试图找出如何使用.NET4.0中的反射设置B.A.Who=C.Who 谢谢 好吧,这并不是很难做到的,但是如果你想要参数验证、优雅的错误处理等,它会变得非常混乱。下面是一个例子,应该强调这项技术(无检查): 您需要对上述代码进行各种检查,以使其健壮。如果您能告诉我们为什么要使用反射来完成此任务,这将非常有帮助。根据场景的不同,可能有更合适的解决方案,例如: 显而易见的类型安全代码 根据需要铸造,然后是类型安全代码 通过构造和编译表达式树生成委托 使用动态 AutoM

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

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


谢谢

好吧,这并不是很难做到的,但是如果你想要参数验证、优雅的错误处理等,它会变得非常混乱。下面是一个例子,应该强调这项技术(无检查):

您需要对上述代码进行各种检查,以使其健壮。如果您能告诉我们为什么要使用反射来完成此任务,这将非常有帮助。根据场景的不同,可能有更合适的解决方案,例如:

  • 显而易见的类型安全代码
  • 根据需要铸造,然后是类型安全代码
  • 通过构造和编译表达式树生成委托
  • 使用
    动态
  • AutoMapper和其他库

  • 好吧,这并不是很难做到,但是如果你想要参数验证,优雅的错误处理等等,它会变得非常混乱。下面的例子应该强调这项技术(无检查):

    您需要对上述代码进行各种检查,以使其健壮。如果您能告诉我们为什么要使用反射来完成此任务,这将非常有帮助。根据场景的不同,可能有更合适的解决方案,例如:

  • 显而易见的类型安全代码
  • 根据需要铸造,然后是类型安全代码
  • 通过构造和编译表达式树生成委托
  • 使用
    动态
  • AutoMapper和其他库
  • Class A
    {
      Property string Who;
      Property string Where;
    }
    
    Class B
    {
      Property A Information;
    }
    
    Class C
    {
       Property String Who;
    }
    
    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);
    }