2010-12-28 68 views
5

Tôi sử dụng quyền kiểm soát của bên thứ ba để xuất một số dữ liệu sang các định dạng khác nhau. Bộ điều khiển có thuộc tính ExportSettings. Nhưng nó là chỉ đọc.Liệt kê và sao chép các thuộc tính từ một đối tượng này sang đối tượng khác cùng loại

Tôi đã phải tự thiết lập thuộc tính của nó như

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

Vì vậy, tôi nhận được ExportSettings phản đối từ người sử dụng và tôi muốn thiết lập nó để kiểm soát.

Làm cách nào để sao chép tất cả các giá trị thành viên của nó vào điều khiển người dùng?

Trả lời

18

Hãy thử suy nghĩ dựa trên nhân bản:

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

Bạn có thể làm điều đó qua Reflection.

Something như thế này:

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)); 
    } 
    } 
Các vấn đề liên quan