Hallo,
ich habe ein Liste die mehrere simple Objekt enthält. Diese Objekt besitzen sehr viele Properties, um Daten zu speichern:
Delphi-Quellcode:
TMyDataObj = class(TObject)
private
...
public
property ValueA: string read ValueA write ValueA;
property ValueB: string read ValueB write ValueB;
property ValueC: string read ValueC write ValueC;
...
end;
Ich benötige nun eine Funktion, der ich einen Feldnamen übergebe, anhand dessen dann der Wert einer bestimmten Property zurückgegeben werden soll. Beispielsweise GetFieldValue(ADataObj, 'MeinFeldX')
Mein Code dazu:
Delphi-Quellcode:
procedure GetFieldValue(ADataObj: TMyDataObj; const FieldName: string): string;
begin
if AnsiSameText(FieldName, 'Wert1') then
result := ADataObj.ValueA
else if AnsiSameText(FieldName, 'MeinFeldX') then
result := ADataObj.ValueB
if AnsiSameText(FieldName, 'Feld7') then
result := ADataObj.ValueC
end;
Wie man sieht brauche ich pro Property einen String-Vergleich. Der FieldName stimmt nie mit dem Namen der Propery überein. Wenn das ganze nun für viele Felder und sehr viele Objekte in einer verschachtelten Schleife aufgrufen wird, dauert die Ausführung zu lange. Da die String-Vergleiche für jedes Objekt wieder und wieder ausgeführt werden. Wie kann ich das schneller hinbekommen? Kann man die Verknüpfung vom String-Feldname zur Property nicht irgendwie speichern, nach dem sie das erste mal ermittelt wurde? Wenn ich so Objekte identifizieren wollte, würde ich diese in einem TDictionary<AObjectName,AObject> speichern. Das geht aber nicht mit properties oder doch?