Я согласен, что ICloneable предоставляет лучший интерфейс для демонстрации поведения клонирования, но рекомендую заглянуть в AutoMapper для выполнения реальной работы.AutoMapper позволит вам динамически отображать типы без всего кода AZ = BZ.
И, при отображении одной коллекции в другую, AutoMapper автоматически создаст копии исходных элементов.Фактически, вы можете использовать оператор, подобный следующему, для создания второй коллекции на лету:
var secondCollection = Mapper.DynamicMap<Collection<Items>>(firstCollection);
Вы можете легко поместить это в метод ICloneable.Clone, например:
object ICloneable.Clone()
{
return Mapper.DynamicMap<ThisType>(this);
}
(DynamicMap - это удобный метод, который позволяет отображать объекты без предварительного определения отображения. Это полезно, если вам не нужно определять какие-либо дельты при отображении, как это было бы в случае простого клонирования объекта.)
Это также хороший способ реализации Clone, когда вы работаете на платформах, которые не поддерживают тип BinaryFormatter, который обычно используется.
Надеюсь, это поможет.