Я использую класс экземпляра от стороннего DLL, и я должен сделать глубокую копию на конкретном экземпляре. Класс не отмечен как Serializable
, и поэтому я не могу использовать это предложенное использование метода BinaryFormatter
.
Как я могу получить глубокую копию этого объекта, не используя сериализацию?
Я использовал , скопируемый с большим успехом. Он использует отражение под капотом. Это открыто. Обязательно прочитайте ограничения и подводные камни , чтобы увидеть, если вы можете использовать его.
Что-то подобное веб-сайту описывает?
-121--4585721-Вы не можете (или, возможно, не должны это то, что я ищу).
Если класс не предназначен для сериализации и не предоставляет средства для его клонирования (т.е. в виде клона или метода копирования), то это невозможно сделать автоматически. (И кроме того, если это средство не предоставляется, то, вероятно, не стоит этого делать, так как класс, вероятно, не разработан с учетом этого типа использования.)
Однако, если вы действительно хотите сделать это и находитесь в среде полного доверия, то, конечно, вы можете сделать некоторые грязные вещи с помощью FormatterServices.GetUninitializedObject
, а затем с помощью отражения скопировать значения поля из одного объекта в другой. Но это почти наверняка плохая идея.