Ok, sofern weitere Details interessant sind will ich mal ein wenig die Hosen runter lassen.
Delphi-Quellcode:
TGuid = record
private
...
public
...
class operator Equal(const Guid1, Guid2: TGuid): Boolean;
...
property TS1: TDateTime read get_TS1 write fTS1;
property TS2: TDateTime read get_TS2 write fTS2;
property C: LongWord read get_C write fC;
end;
...
{ TGuidEqualityComparer }
function TGuidEqualityComparer.Equals(const Left, Right: TGuid): Boolean;
begin
Result := (Left = Right);
end;
function TGuidEqualityComparer.GetHashCode(const Value: TGuid): Integer;
begin
Result := Value.fC;
end;
...
var
lC: IEqualityComparer<TGuid>;
begin
lC := TGuidEqualityComparer.Create;
fDic := TDictionary<TGuid, IsoGuid>.Create(lC);
...
Dic.TryGetValue(aGuid, rGuid);
Dic.Remove(aGuid);
Dic.Add(aGuid, aGuidIntf);
Somit wird also m.E. der Longword-Bestandteil (möglicher Wertebereich 0..99999) der
GUID als Hash-Basis verwendet.
Im Grund ähnlich den Pointern von Sir Rufo.
Wie gesagt, für mich nicht wichtig, aber falls Ihr weiter diskutieren wollt...