type のリストがありTList<TForm>
ます。TList<TObject>
キャストして、次のように使用する必要があります。
procedure mainForm.testCast;
var
listT: TList<TForm>;
listW: TList<TObject>;
obj: TObject;
begin
listT := TList<TForm>.create;
listT.add(form1);
listT.add(form2);
listW := TList<TObject>(listT); // Casting is OK
// This works, but is this fine?
for obj in listW do
memo1.lines.add(obj.className);
end;
サンプルは期待どおりに動作しますが、ジェネリック リスト間でこのようにキャストしても問題ありませんか? これにより、データ構造の破損などが発生しますか? ループ ( DoGetEnumerator
) の目的といくつかの文字列チェックにのみ使用します。つまり、アイテムの追加/削除はしません。
実際の関数はもう少し複雑です。listT
でRTTIを使用するための参照を取得しますTValue
。主な目標はFMX.Forms
、私のユニットにリンクすることではありません。