我正在尝试使用对象的通用字典,其中key是一个字符串,值是TDictionary。这可能吗?我不明白为什么不,但我不知道添加到字典的语法是什么。我尝试了一些东西,但不能完全正确。也许必须以某种方式使用TPair。
此代码演示了我正在尝试做的事情(它没有编译,AddOrSetValue中没有足够的参数)。
program DictTest;
{$APPTYPE CONSOLE}
uses
SysUtils, Generics.Collections;
type
TLookup = TDictionary<integer, integer>;
TCache = TDictionary<string, TLookup>;
var
Cache : TCache;
begin
Cache := TCache.Create;
try
Cache.AddOrSetValue['Hi', ([1, 2])];
finally
Cache.Free;
end;
end.
答案 0 :(得分:2)
如果您的Value是字典,则Cache.Add的第二个参数必须是字典。所以:
Cache.AddOrSetValue('Hi', TLookup.Create);
Cache['Hi'].AddOrSetValue(1, 2);
但是当值是对象时要小心使用AddOrSetValue。如果你不小心,最终可能会导致内存泄漏。
答案 1 :(得分:1)
试试这个:
program DictTest;
{$APPTYPE CONSOLE}
uses
SysUtils, Generics.Collections;
type
TLookup = TDictionary<integer, integer>;
TCache = TDictionary<string, TLookup>;
var
Cache : TCache;
ALookup: TLookup;
begin
Cache := TCache.Create;
try
ALookup := TLookup.Create;
ALookup.Add(1, 2);
Cache.AddOrSetValue['Hi', ALookup];
finally
Cache.Free;
end;
end.