Ребята, у вас острая проблема!
Часть системы TickZoom должна собирать экземпляры каждого типа объекта в словарь типа <>.
Обязательно, чтобы их равенство и хэш-код основывались на экземпляре объекта, что означает ссылочное равенство, а не равенство значений. Проблема состоит в том, что некоторые объекты в системе имеют переопределенные Equals () и GetHashCode () для использования в качестве равенства значений, и их внутренние значения со временем изменятся. Это означает, что их Equals и GetHashCode бесполезны. Как решить это в общем, а не навязчиво?
Пока что мы создали структуру, чтобы обернуть каждый объект с именем ObjectHandle для хеширования в Словарь. Как вы видите ниже, мы реализовали Equals (), но проблема с вычислением хеш-кода остается.
public struct ObjectHandle : IEquatable<ObjectHandle>{
public object Object;
public bool Equals(ObjectHandle other) {
return object.ReferenceEquals(this.Object,other.Object);
}
}
См? Существует метод object.ReferenceEquals (), который сравнивает равенство ссылок без учета какой-либо переопределенной реализации Equals () в объекте.
Теперь, как рассчитать соответствующий GetHashCode (), рассматривая только ссылку, не беспокоясь о каком-либо переопределенном методе GetHashCode ()?
Ах, надеюсь, это даст вам интересную загадку. Мы застряли здесь.
С уважением,
Wayne