![]() |
TDictionary Property
hallo,
ich habe eine Liste der Form TDictionary<string, olevariant). dazu entsprechend nen getter function GetValue(key:string): olevariant; und nen setter procedure SetValue(key:string; value: olevariant); jetzt möchte ich entsprechend properties der folgenden Form anlegen: property id : integer read GetValue('ID') write SetValue('ID'); property name : string read GetValue('Name') write SetValue('Name'); d.h. ich habe diverse Variablen unterschiedlicher Datentypen (deswegen ist auch der wert-typ des dictionary olevariant) und möchte trotzdem direkt auf das TDictionary gehen. in C# geht das, wie geht das in delphi? Danke! MfG hyype |
AW: TDictionary Property
In C# sind die Properties etwas anders, als in Delphi:
In deinem Falle müsstest Du statt
Delphi-Quellcode:
eine extra Funktion
GetValue("ID")
Delphi-Quellcode:
nehmen und dort dann
GetIdValue
Delphi-Quellcode:
aufrufen.
Result := GetValue('ID')
Delphi lässt Funktionen mit Parameter an der Stelle nicht zu. |
AW: TDictionary Property
juhu, 46 sinnlose getter und setter implementieren ^^
danke dir, leider habe ich das schon befürchtet und sitze schon dran :'( |
AW: TDictionary Property
Zitat:
|
AW: TDictionary Property
Delphi-Quellcode:
function Getter(Index: Integer): string;
procedure Setter(idx: Integer; Value: string); property abc: string index 0 read Getter write Setter; property def: string index 1 read Getter write Setter; property xyz: string index 666 read Getter write Setter; |
AW: TDictionary Property
Funktioniert aber leider nicht mit Strings als Index :(
|
AW: TDictionary Property
Das leider nicht (auch wenn das bestimmt leicht umsetzbar wäre), aber mit (Integer)-Konstanten funktioniert es wenigstens.
|
AW: TDictionary Property
Ich habe mir so geholfen:
Delphi-Quellcode:
Also: Pro Datentyp jeweils ein Getter und Setter, der die Daten dann über den Propertynamen abholt bzw. setzt.
Type
TConfig = Class Public Property Value1 : Integer index 0 Read GetIntegerValue Write SetIntegerValue; Property Value2 : String index 1 Read GetStringValue Write SetStringValue; Property Value3 : Integer index 2 Read GetIntegerValue Write SetIntegerValue; ... End; Const PropertyNames : Array [0..N] Of String = ('MyValue','AnotherValue','BarValue'...); Function TConfig.GetIntegerValue (Index : Integer) : Integer; Begin Result := StrToIntDef(GetValueByName(PropertyNames[Index])); End; ... |
AW: TDictionary Property
Vielen Dank für die rege Beteiligung am Thema!
Ich habe mich dafür entschieden, statt dem Dictionary einfach ein Array zu benutzen, dann habe ich einen Typ definiert a la
Delphi-Quellcode:
TMyFields = (mfId, mfBla, mfBlub);
Dadurch kann ich als index mfId angeben statt der harten Zahl und mittels GetEnumName und GetEnumValue kann ich auch mit den Strings arbeiten. Aber trotzdem schade, ich hätte das Dictionary gern mal benutzt.. |
AW: TDictionary Property
Wie wäre es mit einem InMemory-Dataset?
Dann könntest Du auf die Daten so zugreifen:
Delphi-Quellcode:
Gut, im Hintergrund werkelt keine Dictionary, sondern ein dämliches Suchen in einer Liste (der Performance nach zu urteilen), aber es sieht wenigstens so aus wie eine Dictionary.
MyDataSet['Vorname'] := 'Heinz';
MyDataSet['Nachname'] := 'Elmann'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz