Eine Listenklasse zum Speichern von Enums?

8

Welchen Listentyp sollte ich verwenden, um Enum-Werte zu speichern? Ich habe versucht mit TObjectList, ich warf auf TObject, um den Wert hinzuzufügen, aber kann nicht zurück in Enum beim Lesen aus der Liste werfen.

In welcher Liste speichern Sie Enums?

    
elector 05.05.2011, 08:11
quelle

3 Antworten

6

Casting Enums zu Pointer oder TObject und zurück funktioniert gut. Wenn Ihre Delphi-Version Generika unterstützt, verwenden Sie Tims Vorschlag, es ist besser. Alternativ können Sie ein dynamisches Array ( array of TTestEnum ) verwenden oder eine Wrapper-Klasse um das dynamische Array erstellen - so werden generische Listen in generischen Delphi-Versionen implementiert.

Hier ist eine kurze Konsolen-Demo, die TList verwendet, nicht TObjectList , weil TList weniger Annahmen über die enthaltenen Elemente macht.

%Vor%     
Cosmin Prund 05.05.2011 08:31
quelle
5

Könnten Sie nicht einfach Generics dafür verwenden?

%Vor%     
Tim Ebenezer 05.05.2011 08:15
quelle
1

Diese Antwort kann helfen. Es geht darum, Datensätze in einem TList zu speichern, indem ein Nachkomme erstellt wird, um die gesamte Typumwandlung zu vermeiden. Beachten Sie, dass Sie sich keine Gedanken darüber machen müssen, wie Speicher für die Enum-Werte zugewiesen / freigegeben wird, da es sich um einfache ordinale Typen handelt, die in den Raum eines Zeigers passen.

Beachten Sie, dass Sie auf Pointer tippen müssen, wenn Add auf die Liste verweist und beim Zurücklesen möglicherweise als YourEnum (Ganzzahl (Liste [Index])) eingeben muss. Der Code, mit dem ich verlinkt habe, zeigt jedoch, wie man beide in der Nachkommenklasse behandelt, so dass es nur einmal pro Weg gemacht wird, und das ist in der Klassenimplementierung vergraben.

    
Ken White 05.05.2011 11:09
quelle

Tags und Links