【发布时间】:2014-10-18 13:06:05
【问题描述】:
我正在使用delphi XE5。 这是我的代码的简历,下一个代码有效,但我的代码中必须有一些破坏正常行为的东西:
unit Class1;
type
TClass1 = class
private
FDic:TDictionary<String,String>.Create;
public
constructor create;
procedure insertValue(key,value:String);
end;
implementation
constructor TClass1.create;
begin
FDic:=TDictionary<String,String>.Create;
end;
procedure insertValue(key,value:String);
begin
if(FDic.ContainsKey(key))then
FDic[key] := value
else
begin
FDic.Add(key,value);
end;
end.
现在是另一个单位:
unit Class2;
type
uses Class2;
TClass1 = class
public
class2 :TClass2;
TS: TStringList;
procedure DoSomething;
end;
implementation
procedure TClass1.DoSomething;
var
i: Integer;
c,test: TClass1;
begin
c := TClass1.create;
c.insertValue('height','.34cm');
c.insertValue('width','22cm');
c.insertValue('radio','2cm');
TS.AddObject('square',c);
c := TClass1.create;
c.insertValue('height','.88cm');
c.insertValue('width','11cm');
c.insertValue('top','12cm');
TS.AddObject('circle',c);
test := TS.Objects[0] as TClass1;//test.FDic height should be .34cm but gets the value of the last object create, the same for width an common keys.
//here when I look for the values of FDic test.FDic.Items['height'] the value is .88cm instead of .34cm, each time the values of any element of the Dictionary is replace with the previous of the last object created. And the memory address is the same. Why don't create a new memory address for any new element if it is a different object.
这是我的代码简历,我可以放我所有的代码,因为太大了,但我想知道我可以在哪里搜索来解决这个问题。我不是不容易,也许我不是唯一一个有这个问题的人,也许是使用中的某个类,类变量,有一些东西会导致该字典中出现内存问题,但无法找到它。
【问题讨论】:
-
这里显示的代码似乎没有描述的错误。让它编译,看看你是否遗漏了重要的代码片段。
-
请发布显示问题的真实代码,这将永远无法编译
标签: delphi tdictionary