![]() |
Anzahl der Elemente eines Aufzählungstyps ermitteln
Hallo!
Kann man irgendwie die Anzahl der Elemente eines Aufzählungstyps ermitteln?
Delphi-Quellcode:
In diesem Beispiel sollte also int der Wert 3 zugewiesen werden, weil der Aufzählungstyp TMyEnum drei Elemente hat... Nur geht dies eben nicht mit length. Gibt es eine entsprechende Methode, die dies leistet?
type
TMyEnum = (meEins, meZwei, meDrei); ... int := length(TMyEnum); Besten Dank Ares |
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Wenn du einfache Aufzählungen verwendest, kannst du Ord(High(Typ))+1 verwenden. High(TMyEnum) wäre bei dir meDrei und Ord(meDrei) entsprechend 2. Das geht jedoch nicht, wenn du die ordinalen Werte selbst vergibst, z.b.
Delphi-Quellcode:
TMyEnum = (meEins = 100, meZwei = 53, meDrei = 42);
|
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Delphi-Quellcode:
var
i: TMyEnum; Zahler: Integer; begin Zahler := 0; for i := Low(TMyEnum) to High(TMyEnum) do Inc(Zaehler); end; |
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
@Bernhard Geyer :zwinker:
Delphi-Quellcode:
Aber wie Apollonius schon erwähnte geht das nur wenn zwischendurch keine Werte "fehlen".
Anzahl := High(TMyEnum) - Low(TMyEnum) + 1;
also bei den einfachen Varianten
Delphi-Quellcode:
Und für den Rest gibt es keine Möglichkeit, da nirgend's gespeichert wird welche Werte belegt sind und welche nicht.
Anzahl := High(TMyEnum) - Low(TMyEnum) + 1;
// oder Anzahl := High(TMyEnum) + 1; // da Low(TMyEnum) per Defult 0 ist Du kannst dir höchstens eine Konstante definieren, wo du selber die vorhandenen Werte einfügst und kannst dieses dann zählen/prüfen lassen. |
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Sorry quatsch. Schau gerade noch ...
|
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Hallo!
Vielen Dank für den Tipp, die for-Schleife funktioniert prima. Kann man das auch in eine allgemeine Funktion umwandeln, die für einen beliebigen Aufzählungstyp die Anzahl der Elemente ermittel?
Delphi-Quellcode:
Dies funktioniert leider nicht, weil i in der for-Schleife ein Ordinaltyp sein muss. Ich weiß allerdings nicht wie man einen Ordinaltyp angibt. Etwas wie i: TOrdType; gibt es nicht...
function EnumLength(Enum: TClass): Integer;
var i: TClass; begin result := 0; try for i:=Low(Enum) to High(Enum) do inc(result); except end; end; EDIT: Ok, ich habe gerade erste die weiteren Antworten gesehen. Ich verwende nur Aufzählungstypen, bei denen ich die Ordinalwerte nicht selber vorgebe. Der Spezialfall, dass "zwischendurch Werte fehlen" kann hierbei also ignoriert werden. Für die Variante result := High(TOrdType)-1; fehlt mir auch noch das Wissen wie man korrekt einen Ordinaltyp angibt... |
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
i muss vom typ integer sein.
|
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
var i: Integer; !!
Ordinaltypen sind Integer, Char, Byte, Word etc. |
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Zitat:
|
Re: Anzahl der Elemente eines Aufzählungstyps ermitteln
Ich habe mich auf obiges Beispiel bezogen, war vermutlich nur ein kleiner fehler wenn man in Gedanken ist ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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