Frage

Ich habe eine Klasse A, die iequatable <> mit seinen Feldern (z. B. AB und AC) zum Implementieren/Überschreiben von Equals () und überschriebene Gethashcode () implementiert, und alles funktioniert in 99% der Fälle gut. Klasse A ist Teil einer Hierarchie (Klasse B, c), die alle von der Schnittstelle d erben; Sie können alle zusammen in einem Wörterbuch -Wörterbuch aufbewahrt werden, daher ist es bequem, wenn sie alle ihren eigenen Standard gleich ()/Gethashcode () tragen.

Während der Konstruktion von KI müssen jedoch einige Arbeiten erledigen, um die Werte für AB und AC zu erhalten. Währenddessen möchte ich einen Hinweis auf die Instanz speichern, die gebaut wird. In diesem Fall möchte ich den von A bereitgestellten Standard ()/Gethashcode () -Verschreibungen nicht verwenden. Daher habe ich darüber nachgedacht, einen ReferenzequalityComparer zu implementieren, der die Verwendung von Objekte Equals ()/GethashCode () erzwingen soll. :

    private class ReferenceEqualityComparer<T> : IEqualityComparer<T>
    {
        #region IEqualityComparer<T> Members
        public bool Equals(T x, T y)
        {
            return System.Object.ReferenceEquals(x, y);
        }

        public int GetHashCode(T obj)
        {
            // what goes here? I want to do something like System.Object.GetHashCode(obj);
        }
        #endregion
    }

Die Frage ist, wie ein Objekt überschreibt.

Eine Möglichkeit wäre natürlich, IEquatable <> nicht zu implementieren und immer ein iEqualityComparer <> für jedes von mir erstellte Wörterbuch zu liefern, aber ich hoffe auf eine andere Antwort.

Vielen Dank

War es hilfreich?

Lösung

Das natürliche Match für object.ReferenceEquals ist RuntimeHelpers.GetHashCode.

In der Antwort auf diese Frage finden Sie alle Details und eine Implementierung von ObjectReferenceEqualityComparer<T>: Eingebaut IEqualityComparer<T> das verwendet ReferenceEquals

Andere Tipps

Rufen Sie die Basisimplementierung der CLR über Interop an: Standardimplementierung für Object.gethashcode ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top