2009-10-23 4 views
1

J'essaie d'utiliser un dictionnaire générique d'objets où la clé est une chaîne, et la valeur est TDictionary. Est-ce possible? Je ne vois pas pourquoi pas, mais je ne sais pas quelle serait la syntaxe à ajouter au dictionnaire. J'ai essayé quelques petites choses mais je n'arrive pas à bien faire les choses. TPair doit peut-être être utilisé d'une manière ou d'une autre.Comment ajouter un TList générique <Valeur, TDictionary> dans Delphi

Ce code montre ce que j'essaie de faire (il ne compile pas, pas assez de paramètres dans 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. 

Répondre

2

Si votre valeur est un dictionnaire, le second paramètre de Cache.Add doit être un dictionnaire. Donc:

Cache.AddOrSetValue('Hi', TLookup.Create); 
Cache['Hi'].AddOrSetValue(1, 2); 

Mais attention à l'utilisation de AddOrSetValue lorsque la valeur est un objet. Si vous ne faites pas attention, vous pouvez vous retrouver avec des fuites de mémoire.

1

Essayez ceci:

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. 
Questions connexes