Example for using Generics.Collections.TObjectDictionary

后端 未结 1 1743
庸人自扰
庸人自扰 2020-12-15 06:00

The Delphi XE2 online help (as well as the Embarcadero DocWiki) is very thin on the documentation of TObjectDictionary (or I am too stupid to find it).

相关标签:
1条回答
  • 2020-12-15 06:23

    The main difference between a TObjectDictionary and a TDictionary is that provides an mechanism to specify the Ownership of the keys and/or values added to the collection (dictionary), So you don't need to worry about freeing these objects.

    Check this basic sample

    {$APPTYPE CONSOLE}    
    {$R *.res}
    uses
      Generics.Collections,
      Classes,
      System.SysUtils;
    
    
    Var
      MyDict  : TObjectDictionary<String, TStringList>;
      Sl      : TStringList;
    begin
      ReportMemoryLeaksOnShutdown:=True;
      try
       //here i'm  creating a TObjectDictionary with the Ownership of the Values 
       //because in this case the values are TStringList
       MyDict := TObjectDictionary<String, TStringList>.Create([doOwnsValues]);
       try
         //create an instance of the object to add
         Sl:=TStringList.Create;
         //fill some foo data
         Sl.Add('Foo 1');
         Sl.Add('Foo 2');
         Sl.Add('Foo 3');
         //Add to dictionary
         MyDict.Add('1',Sl);
    
         //add another stringlist on the fly 
         MyDict.Add('2',TStringList.Create);
         //get an instance  to the created TStringList
         //and fill some data
         MyDict.Items['2'].Add('Line 1');
         MyDict.Items['2'].Add('Line 2');
         MyDict.Items['2'].Add('Line 3');
    
    
         //finally show the stored data
         Writeln(MyDict.Items['1'].Text);
         Writeln(MyDict.Items['2'].Text);        
       finally
         //only must free the dictionary and don't need to worry for free the TStringList  assignated to the dictionary
         MyDict.Free;
       end;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
      Readln;
    end.
    

    Check this link Generics Collections TDictionary (Delphi) for a complete sample about how to use a TDictionary (remember the only difference with the TObjectDictionary is the Ownership of the keys and/or values that is specified in the constructor, So the same concepts applies to both)

    0 讨论(0)
提交回复
热议问题