Um das Verhalten eines Typen als Key in einem Dictionary zu untersuchen, schaut man sich einfach die Ergebnisse vom zugehörigen
IEqualityComparer an, den man durch Abfrage von
TEqualityComparer<T>.Default
bekommt.
Delphi-Quellcode:
procedure foo;
var
c: IEqualityComparer<TGuid>;
v1, v2: TGuid;
h1, h2: integer;
begin
c := TEqualityComparer<TGuid>.Default;
v1 := ...
v2 := ...
Assert( v1=v2 ); // gleiche Werte
h1 := c.GetHashCode( v1 );
h2 := c.GetHashCode( v2 );
Assert( h1=h2 ); // sollten den gleichen Hashcode haben
Assert( c.Equals( v1, v2 ); // und als gleich erkannt werden
end;
Wenn hier jetzt ein Fehler kommt, dann weiß man, warum das mit dem Dictionary nicht funktioniert.
Dann muss man sich auf die Suche machen oder einen
eigenen IEqualityComparer<TGuid>
mitliefern.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)