![]() |
Delphi-Version: 5
Generisches Array über RTTI abfragen
Hallo!
Gibt es eine Möglichkeit, generische Arrays über die neue RTTI-Funktionaltiät abzufragen? Bsp:
Delphi-Quellcode:
Ich würde gerne herauskriegen, wieviel Einträge das Array hat und wenn möglich, von welchem Typ die Einträge sind, damit ich diese dynamsich ermitteln kann.
property BoolArray: TArray<Boolean> read GetBoolArray write SetBoolArray;
property IntArray: TArray<Integer> read GetIntArray write SetIntArray; Mein TValue liefert wie erwartet tkDynArray, jedoch komme ich dann nicht mehr weiter. Vielen Dank, Hans. Sorry, oben ist die falsche Delphi-Version angegeben (sollte XE3 heißen). Wie kann ich das korrigieren? |
AW: Generisches Array über RTTI abfragen
Nochmals mit dem gleichen Problem:
Ist es vielleicht besser, die Liste als TList<> zu deklarieren? Beispiel:
Delphi-Quellcode:
Hier erhalte ich tkClass als Type, aber auch dann komme ich nicht weiter.
property BoolArray: TList<Boolean> read GetBoolArray write SetBoolArray;
property IntArray: TList<Integer> read GetIntArray write SetIntArray; Vielleicht weiß ja wer, wie ich damit die einzelnen Elemente ermitteln kann. Es handelt sich um simple Datentypen (Integer, Boolean). Hans. |
AW: Generisches Array über RTTI abfragen
Mir ist noch nicht ganz klar, wo und wie du hier die neue RTTI einsetzt.
Delphi-Quellcode:
hört sich eher nach alter RTTI an.
tkDynArray
|
AW: Generisches Array über RTTI abfragen
Mit tkClass od. tkDynArray meine ich der Wert von TValue.Kind. Ich dachte immer TValue hat was mit der neuen RTTI zu tun?
Habe aber inzwischen eine Lösung gefunden, vielleicht geht es auch eleganter (bin offen für Vorschläge):
Delphi-Quellcode:
Ist leider nicht komplett abstract, d.h. ich muss hier den gewünschten Objekt-Typ wissen, aber für meinen Bereich reicht dies aus.var OptValue: TValue; // Boolean-Liste ausgeben if (OptValue.Kind = tkClass) and (OptValue.AsObject is TList<Boolean>) then begin BooleanList := OptValue.AsObject as TList<Boolean>; for i := 0 to BooleanList.Count - 1 do // do something end |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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-2025 by Thomas Breitkreuz