我试图在delphi中存储一组值,但我希望能够使用它们的名称而不是分配的号码来解决它们。
例如,'OldValues'数组会让我做
OldValue[1] := InflationEdit.Text;
然而,理想情况下,我希望将值存储在'Data.Inflation.OldValue'中。对于每个标识符,例如Inflation,都有OldValue,NewValue和StoredValue。这些标识符中大约有12个。
有什么方法可以存储像这样的值吗?那样我就可以这样做:
Data.Inflation.NewValue := Data.Inflation.OldValue;
Data.Inflation.NewValue := InflationEdit.Text;
答案 0 :(得分:2)
在这类问题上,一堂课真的会非常方便。喜欢的东西;
// Inflation record
TInflation = record
NewValue,
OldValue:string;
end;
/ data class
Tdata = class(object)
private
Inflation:TInflation;
// other properties
...
public
constructor ...
end;
data := TData.create(nil)
data.Inflation.NewValue := data.inflation.OldValue;
...
答案 1 :(得分:1)
这可能对您有用:
- 的Jeroen
答案 2 :(得分:1)
type
TIndentifier = class
private
FOldValue: string;
FNewValue: string;
FStoredValue: string;
public
constructor Create(const OldValue, NewValue, StoredValue: string);
property OldValue: string read FOldValue write FOldValue;
property NewValue: string read FNewValue write FNewValue;
property StoredValue: string read FStoredValue write FStoredValue;
end;
这是你的基类。您将它用于每个值。那你有两个选择。你可以这样做:
var
Values: TStringList;
begin
Values.AddObject('SomeValue', TIndentifier.Create('OldValue', 'NewValue', 'StoredValue'));
这让我想起瑞士刀与TStringList :)有多相似。注意释放旧版delphi中的对象,或将TStringList设置为最新版本中对象的所有者。
如果您需要的不仅仅是名称,还可以拥有对象列表:
type
TValue = class(TIndentifier)
private
FName: string;
public
property Name: string read FName write FName;
end;
var
Value: TValue;
Values: TObjectList;
begin
Value := TValue.Create('OldValue', 'NewValue', 'StoredValue');
Value.Name := 'SomeValue';
Values.Add(Value);
但在这种情况下我真正喜欢的是XML的强大功能。它节省了如此多的代码,但另一方面隐藏了声明。使用我的SimpleStorage,您可以执行以下操作:
var
Value: IElement;
Storage: ISimpleStorage:
begin
Storage := CreateStorage;
Value := Storage.Ensure(['Values', 'SomeValue']);
Value.Ensure('OldValue').AsString := 'OldValue';
Value.Ensure('NewValue').AsString := 'NewValue';
Value.Ensure('StoredValue').AsString := 'StoredValue';
答案 3 :(得分:1)
什么版本的Delphi?如果它是Delphi 2009或更新版本,您可以使用TDictionary。
将您的名称存储为Key,并将具有OldValue和NewValue成员的对象存储为值。
MyDictionary: TDictionary<string, TMyClass>;
按名称搜索TMyClass的给定实例:
MyDictionary.Items[SomeName];