![]() |
Anzahl der Elemente einer Aufzählung
Hi,
wie kann ich die Anzahl der Elemente einer Enumeration ermitteln? Folgendes funktioniert leider nicht:
Delphi-Quellcode:
Bei beiden Varianten erhalte ich vom Compiler die Meldung:
type
TCsScCategory = ( cscText, cscInteger, cscFloat, cscDateTime, cscColor, cscURL, cscHTML, cscEncryption, cscHash ); ... ... procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := High(TCsScCategory); // i := Length(TCsScCategory); ShowMessage(IntToStr(i)); end; Zitat:
Andreas |
AW: Anzahl der Elemente einer Aufzählung
Nee, da hast Du einen anderen Fehler drin.
Das hier funktioniert:
Delphi-Quellcode:
Das funktioniert aber nur, wenn Du Delphi die Nummerierung der Aufzählungselemente überlässt (so, wie Du es ja auch gemacht hast).
Var
Anzahl : Integer; Begin Anzahl := Ord(High(TMeineAufzaehlung))-1; |
AW: Anzahl der Elemente einer Aufzählung
Deine Variante funktioniert, nur das ich plus 1 statt Minus 1 rechnen muss.
Danke für deine Hilfe :) |
AW: Anzahl der Elemente einer Aufzählung
Dann am besten gleich
Delphi-Quellcode:
ord(high(YourEnum)) - ord(low(YourEnum)) + 1
|
AW: Anzahl der Elemente einer Aufzählung
Zitat:
|
AW: Anzahl der Elemente einer Aufzählung
Die Furtbichler Variante liefert den Index des höchsten Wertes (8) zurück.
Die SirThornberry Variante liefert die Anzahl (8-0+1=9) zurück |
AW: Anzahl der Elemente einer Aufzählung
Im Prinzip darin, daß die Zählung nicht unbedingt bei 0 begonnen werden muß.
Aber wenn man es ganz genau sieht, müßte man sogar noch genauer hingucken, denn auch zwischendurch kann was weggelassen werden, aber real paßt noch viel mehr in in diese Variable rein. (2 hoch (SizeOf(TMeineAufzaehlung) * 8)) (aber leider ist die RTTI seit jahrzehnten defekt, wenn es um Enums mit benutzerdefinierten Werten geht)
Delphi-Quellcode:
type
TMeinGemeinerEnum = (Abc=3, Xyz=9); Anzahl = 2 Low(TMeinGemeinerEnum) = Abc High(TMeinGemeinerEnum) = Xyz Ord(Low(TMeinGemeinerEnum)) = 3 Ord(High(TMeinGemeinerEnum)) = 9 Ord(High(TMeinGemeinerEnum)) + 1 = 10 (aka Lenght, wenn man bei 0 beginnt zu zählen) Ord(High(TMeinGemeinerEnum)) - Ord(Low(TMeinGemeinerEnum)) + 1 = 7 |
AW: Anzahl der Elemente einer Aufzählung
Zitat:
Ach, in meinen Programmen findest du oft solche Konstrukte wie:
Delphi-Quellcode:
. -1 weil x bei 0 anfängt und +1 weil mir das egal ist. Ne, natürlich nicht, sondern es hat meistens auch einen Grund. Und auch wenn x - 1 + 1 dämlich aussieht, nach einem Jahr kriegt man die Logik der Formel besser hin als wenn es fehlen würde.
x - 1 + 1
|
AW: Anzahl der Elemente einer Aufzählung
Zitat:
Es gibt wohl keine vollständig korrekte Lösung. |
AW: Anzahl der Elemente einer Aufzählung
Guten Morgen :)
Danke für die vielen informativen Antworten. Für den Moment ist die Variante von Furtbichler für mich ausreichend.
Delphi-Quellcode:
Anzahl := Ord(High(TMeineAufzaehlung)) + 1;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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