Как получить сырой хэш-код из класса, который повторно реализует GetHashCode? - PullRequest
3 голосов
/ 14 сентября 2011

Короткий вопрос: Как получить значение object.GetHashCode() для объекта, который повторно реализовал GetHashCode()?

Длинная история: Итак, яиметь около ста тысяч объектов, каждый из которых имеет много общих строк (не во время компиляции).Обычно, если значение равно, это один и тот же экземпляр.

Зная это, я полагаю, что я предпочел бы использовать стандартное сравнение объектов (ReferenceEquals), а не полное сравнение строк - особенно этоищутся в словарях довольно регулярно.

Так что я объявляю class ReferenceEqualityComparer : IEqualityComparer для использования с Dictionary<string, TValue>, полагая, что это было бы полезно иметь в любом случае, и попытался реализовать дваметоды.

Равно достаточно просто, используйте object.ReferenceEquals.

Но как мне получить эквивалент object.GetHashCode() для метода GetHashCode?

, то есть какполучить какое-либо представление экземпляра объекта?

Я знаю, что есть и другие способы сделать это - создать класс InternedString, который содержит ссылку на string, но не реализует Equals или GetHashCode, или хранить индексы, а не строки с каждым объектом, но мне теперь любопытно - есть ли способ реализовать универсальный ReferenceEqualityComparer?

1 Ответ

3 голосов
/ 14 сентября 2011

Посмотрите на RuntimeHelpers.GetHashCode(object).

...