![]() |
Delphi-Version: 5
Generische Listen
Ich bin gerade dabei, mir eine Klasse zu schreiben, die Daten serialisiert und in eine XML speichert und auch wieder laden kann.
Nun stellt sich die Frage, wenn ich eine TObjectList<T> übergebe, kommt ich an den Typen von T ran, damit ich die richtigen Klassen instanzieren kann? |
AW: Generische Listen
Da Delphi keine Covarianz unterstützt geht hier nur der Hardcast auf TObjectList<TObject> und/oder das ermitteln des Typs von T mithilfe von Typnamen parsen und RTTI.
Dazu kannst du dir anschauen, ![]() |
AW: Generische Listen
Meinst Du sowas?
Delphi-Quellcode:
GetTypeData(TypeInfo(T)).ClassType = TIrgendwas
|
AW: Generische Listen
Das ja TypeInfo von der Liste und nicht die, von dem Typen T der in der TObjecList enthalten ist.
|
AW: Generische Listen
Andere Alternative, die mir gerade noch einfällt, wäre sowas:
Delphi-Quellcode:
type
TMySerializer = class procedure SerializeList<T: class>(List: TList<T>); procedure DeserializeList<T: class, constructor>(List: TList<T>); procedure TMySerializer.DeserializeList<T>(List: TList<T>); var newItem: T; begin ... newItem := T.Create; Self.DeserializeObject(newItem); List.Add(newItem); ... end; |
AW: Generische Listen
Ah, Idee ist gut, mal schauen.
Danke Stevie! |
AW: Generische Listen
Also, Du kannst Dir natürlich auch mit folgender function behelfen, solange Dein Typ T eine einfache Klasse ist:
Delphi-Quellcode:
Ist zwar 'ne Krücke, funktioniert aber prima in D2010!
function GetGenericType(const AName: string): TRTTIType;
function ExtractQualifiedName(const AName: string):string; var i: integer; begin i:= succ(pos('<', AName)); Result:= copy(AName, i, pos('>', AName)-i); end; var lCTX: TRTTIContext; begin Result:= lCTX.FindType(ExtractQualifiedName(AName)); end; |
AW: Generische Listen
Hatte ich auch schon ausprobiert, nur bekomme ich nicht alle Typen zurück.
Stevies Gedanken habe ich nun mittlerweile zu Papier gebracht ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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