Клонировать объект, к которому я не могу добавить ICloneable

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

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

1 ответ

Решение

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

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

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));
Другие вопросы по тегам