Все зависит от того, какой тип клонирования вы хотите. Если вы хотите мелкое клонирование, это достаточно просто. Перебирая свойства объекта и устанавливая их на клоне, мы это сделаем. Но это означает, что свойства, содержащие ссылки, будут ссылаться на один и тот же объект как для источника, так и для клона.
Если вы хотите глубокое клонирование, вам нужно будет найти способ также клонировать ссылки, принадлежащие исходному объекту (и ссылки, принадлежащие ссылкам, принадлежащим источнику и т. Д. И т. Д.). Это может быть невозможно сделать автоматически, если эти ссылки не имеют конструкторов по умолчанию.
Что сводится к тому, что, по моему опыту, если у вас есть нетривиальный класс и / или иерархия классов (особенно с возможностью несуществующих конструкторов по умолчанию), самый простой и надежный способ - это просто напишите либо «конструктор копирования» (который не существует как таковой в .NET), и выполняйте работу самостоятельно, реализуйте ICloneable
и выполняйте работу самостоятельно, либо реализуйте свой собственный метод Clone, и выполняйте работай сам;)