Как уже упоминалось в комментариях выше, создайте пример кода для двух методов, которые вы хотите сравнить.
Но это еще не все;
если вы пишете методы клонирования для каждого класса, это много повторяющегося кода с большей вероятностью создания ошибок.
Однако, если вы используете сериализацию / десериализацию JSON, вы можете создать универсальный метод расширения, который будет работать для любого объекта.
Реализация из другого SO-ответа (код скопирован из ответа):
/// <summary>
/// Perform a deep Copy of the object, using Json as a serialisation method. NOTE: Private members are not cloned using this method.
/// </summary>
/// <typeparam name="T">The type of object being copied.</typeparam>
/// <param name="source">The object instance to copy.</param>
/// <returns>The copied object.</returns>
public static T CloneJson<T>(this T source)
{
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null))
{
return default(T);
}
// initialize inner objects individually
// for example in default constructor some list property initialized with some values,
// but in 'source' these items are cleaned -
// without ObjectCreationHandling.Replace default constructor values will be added to result
var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source), deserializeSettings);
}
Чтобы выполнить эту работу с копированием свойств объекта, являющегося интерфейсом, вы должны добавить TypeNameHandling = TypeNameHandling.Auto
в JsonSerializerSettings как для сериализации, так и для десериализации ( взято из этого ответа SO )