2010-12-28 3 views
5

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

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

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

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

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

ответ

18

Try отражение на основе клонирования:

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; 
} 
1

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

Что-то вроде этого:

Type exportSettingType = ctrl.ExportSettings.GetType(); 

foreach (PropertyInfo property in exportSettingType.GetProperties()) 
{ 
    object value = property.GetValue(ctrl.ExportSettings, null); 
    property.SetValue(secondControl.ExportSettings, value, null); 
} 
16
static void CopyProperties(object dest, object src) 
    { 
    foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(src)) 
    { 
    item.SetValue(dest, item.GetValue(src)); 
    } 
    } 
Смежные вопросы