![]() |
Delphi-Version: XE5
TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird
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:
Über jeden Ratschlag bin ich dankbar!
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. |
AW: TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird
Ich habe die bisher genutzte Library gegen die Spring4d.Collections ausgetauscht. Das Problem besteht nun nicht mehr.
Es war offenbar ein Bug in der TMultiMap selbst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz