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

Mik*_*ike 4 c# c#-4.0

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

对象1:

  • 名称
  • 地点
  • 年龄
  • 地址

对象2:

PersonRule

  • PERSONNAME
  • PersonLocation
  • 人士

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

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

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

谢谢,-Mike

Ser*_*kin 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);
Run Code Online (Sandbox Code Playgroud)