2009-05-08 17 views
11

Per quanto ne so, non esiste un equivalente diretto in C#. La mia idea attuale è quella di utilizzare un dizionario con un IEqualityComparer personalizzato, che controlli l'uguaglianza di riferimento.C# Equivalente di Java IdentityHashMap

Tuttavia, questo sembra perdere il vantaggio ottenuto dall'hashing. C'è un modo per ottenere un hashcode individuale da ogni oggetto diverso? O è impossibile e dovrei usare qualche altro approccio?

risposta

18

È possibile utilizzare RuntimeHelpers.GetHashCode(object) che chiama non valido object.GetHashCode() - questo è l'equivalente di System.identityHashcode in Java. Penso che sia quello che stai cercando. Quindi il tuo IEqualityComparer userebbe quello per l'hashing e object.ReferenceEquals per l'uguaglianza.

+0

http://stackoverflow.com/questions/8946790/how-to-use-an-objects-identity-as-key-for-dictionaryk-v – Yoseph