1) Weiß jemand, ob es möglich ist, eine unregelmäßige Aufzählung in Delphi (XE) zu durchlaufen?Schleife durch unregelmäßige Aufzählung in Delphi
Schleifen über eine normale Aufzählung ist in Ordnung. Von Delphi Basics:
var
suit : (Hearts, Clubs, Diamonds, Spades);
begin
// Loop 3 times
For suit := Hearts to Diamonds do
ShowMessage('Suit = '+IntToStr(Ord(suit)));
end;
Aber wenn 'Anzug' statt als
var
suit : (Hearts=1, Clubs, Diamonds=10, Spades);
erklärt Schleifen es 10-mal. Nicht überraschend, aber ich würde gerne eine Schleife 3 machen. Die einzige Lösung, die ich bisher gefunden habe, besteht darin, eine Aufzählung in eine Menge umzuwandeln und die 'for ... in'-Schleife wie auf delphi.about.com zu verwenden.
Also, wenn Antwort auf Frage 1) ist nein, dann:
2) Wie von Aufzählung in Delphi zu konvertieren?
Der Kontext, in dem ich es verwende, ist ein Komponenten-Array von Edit-Boxen (TEdit), das eine unregelmäßige Nummerierung hat (edit1, edit5, edit7, edit3, ...). Obwohl es möglich ist, alle Editierfelder neu anzuordnen, wird der Grund für die Verwendung der Aufzählung als flexible Möglichkeit zum Hinzufügen eines Bearbeitungsfelds in der Mitte der Aufzählung entfernt.
Warum können Sie nicht einige "TList" Nachkommen und verwenden darüber iterieren? –
Die Enumeration wird als ein Index in Arrays von TLabels, TEdits und Strings verwendet, so dass ich StringArray [Job]: = Editbox [Job] verwenden kann. TList könnte funktionieren, aber das Ziel war es, den Quellcode leichter lesbar zu machen, indem (unregelmäßige) Enums als Indizes verwendet wurden - wie HashMap in Java. Was ich jetzt sehe, wird wahrscheinlich nicht funktionieren ... – Truls
Haben Sie versucht, XEs RTTI zu verwenden? Das gewöhnliche RTTI vom Gerät 'TypInfo' schlägt kläglich fehl. Anscheinend können Sie nicht 'TypeInfo()' auf einer unregelmäßigen Aufzählung erhalten, ich versuchte auch mit einem Satz und gab mir Zugriffsverletzungen. –