Создать глубокую копию в C #
Я хочу сделать глубокую копию объекта, чтобы я мог изменить новую копию и при этом иметь возможность отменить мои изменения и вернуть исходный объект.
Моя проблема здесь в том, что объект может быть любого типа, даже из неизвестной сборки. Я не могу использоватьBinaryFormatter
или жеXmlSerializer
потому что объект излишне имеет атрибут [Serializable].
Я пытался сделать это с помощьюObject.MemberwiseClone()
метод:
public object DeepCopy(object obj)
{
var memberwiseClone = typeof(object).GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic);
var newCopy = memberwiseClone.Invoke(obj, new object[0]);
foreach (var field in newCopy.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
{
if (!field.FieldType.IsPrimitive && field.FieldType != typeof(string))
{
var fieldCopy = DeepCopy(field.GetValue(newCopy));
field.SetValue(newCopy, fieldCopy);
}
}
return newCopy;
}
Проблема в том, что он не работает со списком (массивом, списком и т. Д.), А не со словарем.
Итак, как я могу сделать глубокую копию неизвестного объекта в C #?
TNX много!