Глубокое копирование в C#
Необходимо было сделать глубокую копию вкладки в контроле TabControl. Сделала это с помощью следующего стандартного кода:
static T CreateShallowCopy<T>(T o)
{
Type type = o.GetType();
MethodInfo memberwiseClone = type.GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
return (T)memberwiseClone.Invoke(o, null);
}
/// Function for doing a deep clone of an object.
/// Returns a deep-copy clone of the object.
static T CreateDeepCopy<T>(T o)
{
T copy = CreateShallowCopy(o);
foreach(FieldInfo f in typeof(T).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
{
object original = f.GetValue(o);
f.SetValue(copy, CreateDeepCopy(original));
}
return copy;
}
вызываю следующим образом:
TabPage newPage = CreateDeepCopy<TabPage>(tabControlSolution.TabPages[Step]);
tabControlSolution.TabPages.Add(newPage);
В результате появляется ексепшен на строчке: tabControlSolution.TabPages.Add(newPage);- 'child' не является дочерним элементом управления этого родительского элемента.
Может кто сталкивался, подскажите плиз, что с этим делать и как обойти...
Заранее спасибо!