Клонировать объект, к которому я не могу добавить 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));