Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TDictionary Property (https://www.delphipraxis.net/168706-tdictionary-property.html)

hyype 5. Jun 2012 15:37

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

daywalker9 5. Jun 2012 15:45

AW: TDictionary Property
 
In C# sind die Properties etwas anders, als in Delphi:

In deinem Falle müsstest Du statt
Delphi-Quellcode:
GetValue("ID")
eine extra Funktion
Delphi-Quellcode:
GetIdValue
nehmen und dort dann
Delphi-Quellcode:
Result := GetValue('ID')
aufrufen.

Delphi lässt Funktionen mit Parameter an der Stelle nicht zu.

hyype 5. Jun 2012 15:48

AW: TDictionary Property
 
juhu, 46 sinnlose getter und setter implementieren ^^
danke dir, leider habe ich das schon befürchtet und sitze schon dran :'(

Furtbichler 5. Jun 2012 16:10

AW: TDictionary Property
 
Zitat:

Zitat von hyype (Beitrag 1169603)
juhu, 46 sinnlose getter und setter implementieren ^^
danke dir, leider habe ich das schon befürchtet und sitze schon dran :'(

46 Properties? Na, wenn das kein design flaw ist...

himitsu 5. Jun 2012 17:46

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;

Namenloser 5. Jun 2012 19:47

AW: TDictionary Property
 
Funktioniert aber leider nicht mit Strings als Index :(

himitsu 5. Jun 2012 20:29

AW: TDictionary Property
 
Das leider nicht (auch wenn das bestimmt leicht umsetzbar wäre), aber mit (Integer)-Konstanten funktioniert es wenigstens.

Furtbichler 6. Jun 2012 06:46

AW: TDictionary Property
 
Ich habe mir so geholfen:
Delphi-Quellcode:
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;
...
Also: Pro Datentyp jeweils ein Getter und Setter, der die Daten dann über den Propertynamen abholt bzw. setzt.

hyype 7. Jun 2012 14:41

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..

Iwo Asnet 7. Jun 2012 14:58

AW: TDictionary Property
 
Wie wäre es mit einem InMemory-Dataset?

Dann könntest Du auf die Daten so zugreifen:
Delphi-Quellcode:
MyDataSet['Vorname'] := 'Heinz';
MyDataSet['Nachname'] := 'Elmann';
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz