Как сгенерировать уникальный хэш-код для объекта на основе его содержимого?

Мне нужно сгенерировать уникальный хэш-код для объекта на основе его содержимого, например, DateTime (2011,06,04) должен быть равен DateTime (2011 , 06,04).

  • Я не могу использовать .GetHashCode (), потому что он может генерировать один и тот же хэш-код для объектов с разным содержимым.
  • Я не могу использовать .GetID от ObjectIDGenerator, поскольку он генерирует другой хеш-код для объектов с то же содержимое.
  • Если объект содержит другие подобъекты, он должен их рекурсивно проверять.
  • Он должен работать с коллекциями.

Почему мне нужно написать это? Я пишу слой кеширования с помощью PostSharp.

Обновление

Думаю, я задавал неправильный вопрос. Как заметил Джон Скит, на всякий случай Мне нужно столько уникальных комбинаций в ключе кеша, сколько комбинаций потенциальных данных в объекте. Поэтому лучшим решением может быть создание длинной строки, которая кодирует общедоступные свойства объекта с помощью отражения. Объекты не слишком большие, поэтому это очень быстро и эффективно:

  • Эффективно построить ключ кеша (просто преобразовать общедоступные свойства объекта в большую строку).
  • Эффективно проверить попадание в кеш (сравните две строки).
17
задан ccellar 19 August 2011 в 13:22
поделиться