Глубоко скопируйте экземпляр класса.NET без сериализации

Я использую класс экземпляра от стороннего DLL, и я должен сделать глубокую копию на конкретном экземпляре. Класс не отмечен как Serializable, и поэтому я не могу использовать это предложенное использование метода BinaryFormatter.

Как я могу получить глубокую копию этого объекта, не используя сериализацию?

8
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Я использовал , скопируемый с большим успехом. Он использует отражение под капотом. Это открыто. Обязательно прочитайте ограничения и подводные камни , чтобы увидеть, если вы можете использовать его.

5
ответ дан 5 December 2019 в 22:18
поделиться

Что-то подобное веб-сайту описывает?

-121--4585721-

Вы не можете (или, возможно, не должны это то, что я ищу).

Если класс не предназначен для сериализации и не предоставляет средства для его клонирования (т.е. в виде клона или метода копирования), то это невозможно сделать автоматически. (И кроме того, если это средство не предоставляется, то, вероятно, не стоит этого делать, так как класс, вероятно, не разработан с учетом этого типа использования.)

Однако, если вы действительно хотите сделать это и находитесь в среде полного доверия, то, конечно, вы можете сделать некоторые грязные вещи с помощью FormatterServices.GetUninitializedObject , а затем с помощью отражения скопировать значения поля из одного объекта в другой. Но это почти наверняка плохая идея.

0
ответ дан 5 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: