Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глубокое копирование в C#

55K
10 мая 2010 года
smailling
1 / / 22.12.2009
Возникла такая проблема:

Необходимо было сделать глубокую копию вкладки в контроле 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' не является дочерним элементом управления этого родительского элемента.
Может кто сталкивался, подскажите плиз, что с этим делать и как обойти...

Заранее спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог