我使用delphi XE5。 這我的代碼簡歷,接下來的代碼工作,但必須是破壞正常行爲的東西在我的代碼:德爾福TDictionary:值有相同的密鑰時自動替換
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.
這是一份簡歷我的代碼,我可以把我所有的代碼,因爲太大,但我想知道我可以搜索以解決這個問題。我並不是不容易,也許我不是唯一一個有這個問題的人,也許是某些類的用法,類變量,有些東西會導致字典中的內存問題,但無法找到它。
此處顯示的代碼似乎沒有描述的錯誤。讓它編譯並看看你是否錯過了一個重要的代碼片斷。 – mjn 2014-10-18 13:28:08
請發佈顯示問題的實際代碼,這將永遠不會編譯 – 2014-10-18 18:35:05