Клонировать объект, к которому я не могу добавить ICloneable - PullRequest
4 голосов
/ 30 августа 2011

Я пытаюсь создать поверхностную копию (новый экземпляр) объекта, не устанавливая вручную каждое поле.Этот объект не является типом, который я могу изменять, поэтому я не могу войти в объект и реализовать ICloneable ... Я немного застрял.Есть ли простой способ просто клонировать объект, или мне нужно будет реализовать метод Clone (), который просто копирует каждое поле в новый объект?

Заранее благодарен за любую помощь!

1 Ответ

5 голосов
/ 30 августа 2011

Используйте отражение, чтобы посмотреть на поля объекта и используйте его для заполнения нового экземпляра.

Это делает некоторые предположения о существовании конструктора, который не принимает аргументов.

Type t = typeof(typeToClone);
var fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var copy = Activator.CreateInstance(t);
for(int i = 0; i < fields.Length; i++)
  fields[i].SetValue(copy, fields[i].GetValue(existing));
...