Генерация хеш-кода на основе идентификатора объекта в .net - PullRequest
2 голосов
/ 23 августа 2010

Как я могу сгенерировать хеш-код для объекта на основе его идентичности.

Я имею в виду следующее:

  • если object.ReferenceEquals(a, b) == true, то a и b получит тот же хеш-код.
  • , если object.ReferenceEquals(a, b) == false, тогда a и b должны иметь хороший шанс получить разные хеш-коды, даже если они равны по элементам.*

    Что у меня есть:

    class SomeClassThatMakesSenseToCompareByReferenceAndByValue {
        override Equals(object o) {
            return MemberwiseEquals(o);
        }
    
        override GetHashCode() {
            return MemberwiseGetHashCode();
        }
    }
    
    class SomeClassThatNeedsReferenceComparison {
        SomeClassThatMakesSenseToCompareByReferenceAndByValue obj;
    
        override Equals(object o) {
            return o is SomeClassThatNeedsReferenceComparison && object.ReferenceEquals(this.obj, (o as SomeClassThatNeedsReferenceComparison).obj);
        }
    
        override GetHashCode() {
            return ?????
        }
    }
    

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Вы, вероятно, ищете RuntimeHelpers.GetHashCode

2 голосов
/ 23 августа 2010

, если вы не переопределите GetHashCode, он вернет этот тождественный хеш-код.

1 голос
/ 23 августа 2010

Ничего не делать - поскольку оба объекта указывают на один и тот же экземпляр, один и тот же HashCode всегда будет генерироваться для обоих объектов с использованием реализации по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...