Некоторая справочная информация:
Я работаю над приложением C # / WPF, которое в основном занимается созданием, редактированием, сохранением и загрузкой некоторой модели данных.
Модель данных содержит иерархию различных объектов.Существует «корневой» объект класса A, у которого есть список объектов класса B, у каждого из которых есть список объектов класса C и т. Д. Всего задействовано около 30 классов.
Теперь моя проблемаэто то, что я хочу подсказать пользователю с обычным "у вас есть несохраненные изменения, сохранить?"диалог, если он пытается выйти из программы.Но как мне узнать, действительно ли изменились данные в текущей загруженной модели?
Конечно, есть способы решить эту проблему, например, перезагрузить модель из файла и сравнить со значением в памяти по значению или сделать так, чтобы каждый элемент управления UI устанавливал флаг, указывающий, что модель была изменена.Теперь вместо этого я хочу создать хеш-значение на основе состояния модели при загрузке и сгенерировать новое значение, когда пользователь пытается выйти, и сравнить их.
Теперь вопрос:
Меня так воодушевило, что мне стало интересно, существует ли какой-либо способ генерирования значения хеш-функции из состояния (значения) некоторого произвольного комплексаобъект?Предпочтительно общим способом, например, нет необходимости применять атрибуты к каждому задействованному классу / полю.
Одной из идей может быть использование некоторых функций сериализации .NET (при условии, что они будут работать из коробки вв этом случае) и применить хеш-функцию к содержимому результирующего файла.Тем не менее, я думаю, что существует более подходящий подход.
Заранее спасибо.
Редактировать:
Точка, полученная о хешировании и возможных коллизияхВместо этого я иду к глубокому сравнению стоимости по стоимости.Я уже использую сериализатор XML для персистентности, поэтому я просто собираюсь сериализовать и сравнивать символы.Не очень, но в этом случае это помогает.