如何动态地将对象中的字段映射到另一个对象?

时间:2012-06-04 12:00:34

标签: c# c#-4.0

我有2个具有属性的对象如下:

对象1:

  • 名称
  • 位置
  • 年龄
  • 地址

对象2:

PersonRule

  • PERSONNAME
  • PersonLocation
  • 人士

PersonRule由UI驱动,该UI设置人员规则(也可以设置多个),并且用户说出规则中应该包含的名称,位置和年龄。如果此人具有相同的属性值,则应将此规则与人匹配。

我可以进行简单的相等检查,但是将来也可能会将新属性添加到人员规则,例如personaddress。然后我需要通过考虑人员地址来检查规则是否与人匹配。

有没有办法可以构建匹配personrule与person属性的所有属性之类的东西,这样我就不需要在新属性添加到规则时进行更改了?当然这是假设相应的属性在person对象中可用。

谢谢, -Mike

2 个答案:

答案 0 :(得分:8)

您可以使用其中一个可用的对象 - 对象映射器库,如AutoMapperEmitMapper。他们将负责将数据从Person实例复制到PersonRule实例,该实例可以与另一个PersonRule实例进行比较。例如,使用EmitMapper,您的代码可能如下所示:

var config = new DefaultMapConfig().MatchMembers((m1, m2) => "Person" + m1 == m2);
ObjectMapperManager.DefaultInstance
                   .GetMapper<Person, PersonRule>(config)
                   .Map(person, personRule);

答案 1 :(得分:0)

您似乎正在寻找reflection,请参阅此示例问题:

How to get the list of properties of a class?