Einzelnen Beitrag anzeigen

Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird

  Alt 16. Apr 2018, 17:26
Delphi-Version: XE5
Liebe Foristen,

ich verwende in einem Projekt die Klasse TMultiMap aus der Library "delphi-coll". Das ist im Prinzip ein TDictionary das den gleichen Key mehrfach enthalten darf.

Jetzt bin ich über ein Phänomen gestolpert. Wenn ich einen Key (und somit auch alle dazugehörigen Values) aus meiner MultiMap entferne und anschließend den gleichen Key mit anderen Values hinzufüge, bleibt meine TMultiMap danach leer. Hat dieses Probem schon einmal jemand beobachten können oder mache ich sogar etwas grundsätzliches falsch? Der folgende Unit-Test demonstriert das Problem:

Delphi-Quellcode:
unit TestMultiMapU;

interface

uses
  TestFramework, Collections.MultiMaps;

type
  TestMultiMap = class(TTestCase)
  strict private
    FMultiMap: TMultiMap<string, string>;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure RemoveKey_AddKeyAgain_MultiMapShouldContainKey;
  end;

implementation

uses
  Collections.Base;

procedure TestMultiMap.RemoveKey_AddKeyAgain_MultiMapShouldContainKey;
const
  csKey = 'Key';
  csValue = 'Value';
var
  Values: ISequence<string>;
begin
  FMultiMap.Add(csKey, csValue);

  CheckEquals(1, FMultiMap.Count); // OK
  CheckTrue(FMultiMap.TryGetValues(csKey, Values)); // = True

  FMultiMap.Remove(csKey);

  FMultiMap.Add(csKey, csValue);

  CheckEquals(1, FMultiMap.Count); // OK
  CheckTrue(FMultiMap.TryGetValues(csKey, Values)); // = False (Es wurde ja wieder ein Eintrag mit .Add angelegt, wieso kann dieser also nicht ausgelesen werden?)
end;

procedure TestMultiMap.SetUp;
begin
  FMultiMap := TMultiMap<string, string>.Create;
end;

procedure TestMultiMap.TearDown;
begin
  FMultiMap.Free;
end;

initialization

// Alle Testfälle beim Testprogramm registrieren
RegisterTest(TestMultiMap.Suite);

end.
Über jeden Ratschlag bin ich dankbar!
  Mit Zitat antworten Zitat