Перечислять и копировать свойства из одного объекта в другой объект того же типа - PullRequest
5 голосов
/ 28 декабря 2010

Я использую сторонний элемент управления, который экспортирует некоторые данные в разные форматы. Элемент управления имеет свойство ExportSettings. Но это только для чтения.

Я должен вручную установить его свойства, такие как

ctrl.ExportSettings.Paging = false;
ctr.ExportSettings.Background = Color.Red;

Итак, я получаю объект ExportSettings от пользователя и хочу установить его для элемента управления.

Как я могу скопировать все значения его элементов в пользовательский элемент управления?

Ответы [ 5 ]

20 голосов
/ 28 декабря 2010

Попробуйте клонирование на основе отражения:

private object CloneObject(object o)
{
    Type t = o.GetType();
    PropertyInfo[] properties = t.GetProperties();

    Object p = t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, 
        null, o, null);

    foreach (PropertyInfo pi in properties)
    {
        if (pi.CanWrite)
        {
            pi.SetValue(p, pi.GetValue(o, null), null);
        }
    }

    return p;
}
17 голосов
/ 28 декабря 2010
  static void CopyProperties(object dest, object src)
  {
   foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(src))
   {
    item.SetValue(dest, item.GetValue(src));
   } 
  }
4 голосов
/ 28 декабря 2010

Использование AutoMapper:

Очень прост в использовании.

Начало работы с AutoMapper

1 голос
/ 28 декабря 2010
1 голос
/ 28 декабря 2010

Вы можете сделать это через Отражение .

Примерно так:

Type exportSettingType = ctrl.ExportSettings.GetType();

foreach (PropertyInfo property in exportSettingType.GetProperties())
{
    object value = property.GetValue(ctrl.ExportSettings, null);
    property.SetValue(secondControl.ExportSettings, value, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...