AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDictionary Property

Ein Thema von hyype · begonnen am 5. Jun 2012 · letzter Beitrag vom 7. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

TDictionary Property

  Alt 5. Jun 2012, 16:37
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
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: TDictionary Property

  Alt 5. Jun 2012, 16:45
In C# sind die Properties etwas anders, als in Delphi:

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

Delphi lässt Funktionen mit Parameter an der Stelle nicht zu.
Lars
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#3

AW: TDictionary Property

  Alt 5. Jun 2012, 16:48
juhu, 46 sinnlose getter und setter implementieren ^^
danke dir, leider habe ich das schon befürchtet und sitze schon dran :'(
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: TDictionary Property

  Alt 5. Jun 2012, 17:10
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TDictionary Property

  Alt 5. Jun 2012, 18:46
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: TDictionary Property

  Alt 5. Jun 2012, 20:47
Funktioniert aber leider nicht mit Strings als Index
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: TDictionary Property

  Alt 5. Jun 2012, 21:29
Das leider nicht (auch wenn das bestimmt leicht umsetzbar wäre), aber mit (Integer)-Konstanten funktioniert es wenigstens.
$2B or not $2B
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: TDictionary Property

  Alt 6. Jun 2012, 07:46
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.
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#9

AW: TDictionary Property

  Alt 7. Jun 2012, 15:41
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
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..
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#10

AW: TDictionary Property

  Alt 7. Jun 2012, 15:58
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
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