4

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

对象 1:

  • 姓名
  • 地点
  • 年龄
  • 地址

对象 2:

个人规则

  • 人名
  • 人物位置
  • 人士

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

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

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

谢谢,-迈克

4

2 回答 2

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);
于 2012-06-04T12:09:44.170 回答
0

看来您正在寻找反射,请参阅此示例问题:

如何获取类的属性列表?

于 2012-06-04T12:04:56.637 回答