2012-06-04 3 views
4

У меня есть 2 объектов с атрибутами, как следующее:Как сопоставить поля в объекте другому динамически?

Объект 1:

Person

  • Имя
  • Расположение
  • Возраст
  • Адрес

Объект 2:

PersonRule

  • PersonName
  • PersonLocation
  • персонажу

В PersonRule приводится в движение с помощью пользовательского интерфейса, который устанавливает правило человека (можно установить много, а) , и пользователь говорит, какое имя, местоположение, возраст должны быть в правиле. Это правило должно быть сопоставлено с человеком, если у человека одинаковое значение для атрибутов.

Я могу сделать простую проверку равенства, однако также возможно, что в будущем новый атрибут добавляется к правилу человека, что-то вроде personaddress. Затем мне нужно проверить, соответствует ли правило персонажу, принимая адрес человека.

Есть ли способ создать что-то вроде соответствия всем атрибутам personrule для человека, так что мне не нужно вносить изменения, когда новый атрибут добавляется в правило? Конечно, это предполагает, что соответствующий атрибут доступен в объекте person.

Спасибо, -Mike

ответ

8

Вы можете использовать один из доступной библиотеки объекта-объект Картостроителей например AutoMapper или EmitMapper. Они позаботятся о копировании данных из экземпляра Person в экземпляр PersonRule, который можно сравнить с другим экземпляром PersonRule. Например, с EmitMapper ваш код может выглядеть так:

var config = new DefaultMapConfig().MatchMembers((m1, m2) => "Person" + m1 == m2); 
ObjectMapperManager.DefaultInstance 
        .GetMapper<Person, PersonRule>(config) 
        .Map(person, personRule); 
Смежные вопросы