Und jetzt erstellst du AList schon im Constructor?
SetDeviceName setzt "Name", aber nicht "DeviceName".
Ist das so gewollt?
Seh ich das richtig, oder gibt es da wirklich eine
globale Variable mit dem Namen "Name"?
Wer gibt die erzeugten TDictionary-Instanzen eigentlich wieder frei?
Da wäre es bestimmt besser, wenn du eine TObjectList nimmst, statt der TList. Und Dieser sagst, daß sie die freigeben soll. (OwnsObjects=True)
Ach ja, man glaubt garnicht, was man an "mehrfachen" Aufrufen einsparen kann.
Delphi-Quellcode:
procedure TDevices.AddAccessories(Name, Description, Price, OType: string);
var
i: Integer;
begin
i := AList.Add(TDictionary<string, string>.Create);
AList[i].Add('name', Name);
AList[i].Add('description', Description);
AList[i].Add('price', Price);
AList[i].Add('type', OType);
end;
procedure TDevices.AddAccessories(Name, Description, Price, OType: string);
var
i: Integer;
begin
//i := AList.Add(TDictionary<string, string>.Create);
//AList[i].Items['name'] := Name;
//AList[i].Items['description'] := Description;
//AList[i].Items['price'] := Price;
//AList[i].Items['type'] := OType;
i := AList.Add(TDictionary<string, string>.Create);
AList[i]['name'] := Name;
AList[i]['description'] := Description;
AList[i]['price'] := Price;
AList[i]['type'] := OType;
end;
procedure TDevices.AddAccessories(AName, ADescription, APrice, AType: string);
var
i: Integer;
begin
with AList[AList.Add(TDictionary<string, string>.Create)] do
begin
Items['name'] := AName;
Items['description'] := ADescription;
Items['price'] := APrice;
Items['type'] := AType;
end;
end;
PS: TObjectDictionary<string,xxx> statt TObjectList<xxx>, wobei der String dann den DeviceName enthält (zusätzlich zum DeviceName in xxx), dann kannst du auch noch die Devices recht schnell in der Liste suchen lassen.