AGB  ·  Datenschutz  ·  Impressum  







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

Feld direkt per Name ansprechen?

Ein Thema von DerMondistunsereSonne · begonnen am 13. Jan 2025 · letzter Beitrag vom 15. Jan 2025
Antwort Antwort
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
43 Beiträge
 
Delphi 12 Athens
 
#1

Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 11:21
Moin,

Irgendwie fehlt mir gerade etwas. Angenommen ich habe ein Array oder etwas vergleichbares, mit A,1,1 und B,2,2, wie kann ich dann meineVariable['A'].ErsteProp aufrufen? Oder gibt es nichts vergleichbares in Delphi?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.522 Beiträge
 
Delphi 12 Athens
 
#2

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 12:05
Sorry, aber ich habe noch nicht verstanden, was du eigentlich machen willst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
43 Beiträge
 
Delphi 12 Athens
 
#3

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 12:09
Ich möchte eine Liste/Dictionary/Struct oder ähnliches anlegen, dass in der ersten Eigenschaft einen Indize enthält, über das ich das Element direkt ansprechen kann:

So etwas wie:

Delphi-Quellcode:
type
  TMyList = packed record
    MyName: string;
    Prop1: string;
    Prop2: Integer;
  end;

var
  MyList: array of TMyList
Und dann so ansprechbar:

MyList['MeinName'].Prop1 := 'MeinName'; Anstatt mittels for nach dem Element zu suchen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.411 Beiträge
 
Delphi 12 Athens
 
#4

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 12:23
Zitat:
Anstatt mittels for nach dem Element zu suchen.
https://docwiki.embarcadero.com/Libr...jectDictionary
1. Klasse für deine Properties TMeineKlasse erstellen
2. in das erzeugte TObjectDictionary<string, TMeineKlasse> das erzeugte Object hinzufügen

Suchen:
Delphi-Quellcode:
 Variable := MyDictionary['Test']; // in der Variable (TMeineKlasse) ist dann das Objekt wenn gefunden, ansonsten nil.
 ...
Bearbeiten:
Delphi-Quellcode:
 Variable := MyDictionary['Test']
 Variable.Prop1 := 'Bla'
 ...
 MyDictionary['Test'].Prop1 := 'Bla';


PS: auch ein Record sollte gehen. Dann aber ein TDictionary. TObjectDictionary räumt die Objekte weg.

Geändert von haentschman (13. Jan 2025 um 12:33 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.103 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 14:20
PS: auch ein Record sollte gehen. Dann aber ein TDictionary. TObjectDictionary räumt die Objekte weg.
...wenn der Konstruktor korrekt aufgerufen wurde.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
43 Beiträge
 
Delphi 12 Athens
 
#6

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 14:23
Ich hatte ja auf eine einfachere Variante gehofft, aber dann schaue ich mir das mal an.

PS: Dein Edit zu spät gesehen, so etwas habe ich mir vorgestellt. Ich versuche mich mal daran.

Geändert von DerMondistunsereSonne (13. Jan 2025 um 14:32 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.103 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Feld direkt per Name ansprechen?

  Alt 13. Jan 2025, 14:30
PS: auch ein Record sollte gehen.
Geht übrigens nicht. Die letzte Zeile deines Codes würde nicht funktionieren, weil du Felder von Eigenschaften, die ein Record sind, nicht schreiben kannst.
Die obersten zwei gehen. Man muss nur die Variable zurückschreiben.
haentschmans zweiter Codeblock enthält zwei völlig unterschiedliche Herangehensweisen vor und nach den Ellipsen. Vermutlich wollte er das untere so nicht schreiben, es würde aber bei Klassen gehen.
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer (13. Jan 2025 um 14:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.411 Beiträge
 
Delphi 12 Athens
 
#8

AW: Feld direkt per Name ansprechen?

  Alt 14. Jan 2025, 06:34
Zitat:
es würde aber bei Klassen gehen.
...persönlich mag ich Records nicht. Deswegen immer alles mit Klassen. Bei der Aussage mit den Records, "sollte gehen", ...war nicht getestet.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Feld direkt per Name ansprechen?

  Alt 15. Jan 2025, 18:55
Zitat:
es würde aber bei Klassen gehen.
...persönlich mag ich Records nicht. Deswegen immer alles mit Klassen. Bei der Aussage mit den Records, "sollte gehen", ...war nicht getestet.
Naja du kannst rumtricksen, dann geht es schon. Ist nur halt nicht so cool. Wenn du aber stattdessen das Ergebnis einer Variablen zuweist und hinterher wieder zurückschreibst, kannst du damit problemlos arbeiten.

Alternativ kannst du natürlich immer über die RTTI auf Felder/Eigenschaften zugreifen und somit Objekte serialisieren. Gibt dazu schon genügend Beispiele.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:42 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