2009-05-08 14 views
11

O ile mi wiadomo, nie ma bezpośredniego odpowiednika w C#. Mój obecny pomysł polega na użyciu słownika z niestandardowym narzędziem IEqualityComparer, który sprawdza równość referencji.C# Równoważnik Java IdentityHashMap

Jednak wydaje się, że traci on przewagę uzyskaną przez mieszanie. Czy istnieje sposób na uzyskanie indywidualnego kodu paskowego z każdego innego obiektu? Czy jest to niemożliwe i powinienem zastosować inne podejście?

Odpowiedz

18

Można użyć RuntimeHelpers.GetHashCode(object), który nie jest praktycznie dostępny pod numerem object.GetHashCode() - jest to odpowiednik System.identityHashcode w języku Java. Myślę, że właśnie o to prosisz. Tak więc twój IEqualityComparer użyłby tego po prostu dla hashowania i object.ReferenceEquals dla równości.

+0

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