2010-12-28 19 views
5

Ich verwende ein Steuerelement von Drittanbietern, die einige Daten in verschiedene Formate exportiert. Das Steuerelement verfügt über eine Eigenschaft ExportSettings. Aber es ist schreibgeschützt.Auflisten und Kopieren von Eigenschaften von einem Objekt zu einem anderen Objekt desselben Typs

Ich habe manuell einstellen seine Eigenschaften wie

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

So bekomme ich die ExportSettings von dem Benutzerobjekt und ich möchte es an die Steuerung setzen.

Wie kann ich alle Mitgliederwerte in das Benutzersteuerelement kopieren?

Antwort

18

Versuchen reflexions basierte Klonen:

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

Sie können es über Reflection tun.

Etwas wie folgt aus:

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)); 
    } 
    } 
Verwandte Themen