type TRen = record name: string; age: Integer; end; type TPeople = class private Fname: string; Fage: Integer; procedure Setname(const Value: string); procedure Setage(const Value: Integer); published property name: string read Fname write Setname; property age: Integer read Fage write Setage; end; procedure TForm3.Button1Click(Sender: TObject); var MyRen: TRen; MyDic: TDictionary<string,TRen>; I: Integer; MyKeyAry: TArray<string>; MyRen2: TRen; begin MyDic := TDictionary<string,TRen>.Create(); try //--------------------------------------- for I := 0 to 2 do begin MyRen.name := '群主'+IntToStr(I); MyRen.age := I; MyDic.Add('key'+IntToStr(I),MyRen); end; //--------------------------------------- MyKeyAry := MyDic.Keys.ToArray; for I := 0 to MyDic.Count-1 do begin MyRen2 := MyRen; MyRen2.name := '操蛋'+IntToStr(I); MyDic.AddOrSetValue(MyKeyAry[I],MyRen2); end; ShowMessage(MyDic['key1'].name); finally MyDic.Free; end; end; { TPeople } procedure TPeople.Setage(const Value: Integer); begin Fage := Value; end; procedure TPeople.Setname(const Value: string); begin Fname := Value; end; procedure TForm3.Button2Click(Sender: TObject); var MyPeople: TPeople; MyDic: TObjectDictionary<string,TPeople>; I: Integer; MyKeyAry: TArray<string>; begin MyDic := TObjectDictionary<string,TPeople>.Create(); try //--------------------------------------- for I := 0 to 2 do begin MyPeople := TPeople.Create; MyPeople.name := '群主'+IntToStr(I); MyPeople.age := I; MyDic.Add('key'+IntToStr(I),MyPeople); end; //--------------------------------------- MyKeyAry := MyDic.Keys.ToArray; for I := 0 to MyDic.Count-1 do begin //这里如果是结构就不能这样赋值,如果是对象就可以. MyDic[MyKeyAry[I]].name := '操蛋'+IntToStr(I); end; //--------------------------------------- //窗体显示 ShowMessage(MyDic['key1'].name); //--------------------------------------- //用这种方式释放吧,不搞了,以后就用这种方式来. for I := 0 to MyDic.Count-1 do begin MyDic[MyKeyAry[I]].Free; end; finally MyDic.Free; end; end;