2016-03-30 7 views
1

Ich bin mir nicht sicher, ob dies tatsächlich mit RTTI möglich ist, aber ich würde ich fragen.Können Sie eine tatsächliche Anwendung finden TStringList mit RTTI

Ich habe eine globale Einheit, die nur eine Reihe von var Auswahllisten in Form von TStringList enthält. Über einen Datenbank-Datensatz, der eine Zeichenfolge zurückgibt, kann ich RTTI verwenden, um die richtige Zeichenfolge-Liste in der Einheit durch "Name" zu finden und sie zurückzugeben?

function GetStringListFromUnitByName(aUnit, aName: String): TStringList; 
begin 

end; 

Wäre es hilfreich, wenn alle Stringlisten als öffentliche Variablen in einer generischen Klasse gespeichert würden?

TMyPickLists = class 
public 
    FList1: TStringList; 
    FList2: TStringList; 
end; 
+0

Dies ist wohl ein Duplikat http://stackoverflow.com/questions/6730405/how-to-access- a-variable-by-it-namestring –

Antwort

3

Globale Variablen können mit RTTI nicht aufgezählt werden. Sie müssten Variablen einer Klasse verwenden, wie Sie vorschlagen. Dies können Instanzvariablen oder Klassenvariablen sein.

Persönlich, aber ich sehe nicht den Sinn der Verwendung von RTTI hier. Wenn es nach mir ginge, würde ich ein Wörterbuch erstellen und die Listen in das Wörterbuch während der Initialisierung hinzuzufügen:

var 
    PickLists: TDictionary<string, TStringList>; 
.... 
PickLists := TDictionary<string, TStringList>.Create; 
PickLists.Add('List1', List1); 
// etc. 
+0

Wahrscheinlich eine klügere Wahl, war nur mehr ein Interesse von "kann es getan werden", danke trotzdem David. – mikelittlewood