AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

Ein Thema von Andreas13 · begonnen am 21. Apr 2023 · letzter Beitrag vom 21. Apr 2023
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

AW: Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

  Alt 21. Apr 2023, 14:27
Jupp, High liefert nicht die Anzahl den Index, sondern das Element, also ee.

Mit Ord lässt sich der Index in einen anderen ordinalen Typen (Integer) konvertieren.

Delphi-Quellcode:
Anzahl := Ord(High(MyType)) + 1;
Anzahl := Succ(Ord(High(MyType)));
//Anzahl := Ord(Succ(High(MyType)));

Ja, wenn man die Indize im Typen manipuliert/vorgibt, und dabei Lücken entstehen, dann fehlt in der Typeinfo die Liste der Elementnamen (auch wenn es dafür einen einfachen Bugfix gäbe, aber Emba wollte nicht)
und somit fehlt auch die Möglichkeit den Teilbereich zu bestimmen. (dann geht es nur noch über die Speichergröße des ganzen Enum und die ist nunmal 1, 2, 4 oder 8 Bytes, bzw. beim Set bis 32 Byte, also 0..255)
$2B or not $2B

Geändert von himitsu (21. Apr 2023 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#12

AW: Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

  Alt 21. Apr 2023, 14:29
Danke, Himitsu!

[Edit]
Anzahl := Ord(Succ(High(MyType))); liefert die Meldung:
[dcc32 Fehler]E1012 Konstantenausdruck verletzt untere Grenzen
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (21. Apr 2023 um 14:38 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

  Alt 21. Apr 2023, 16:15
Funktioniert aber nicht bei solchen Deklarationen (aus dem Delphi DokWiki):
Delphi-Quellcode:
type
  Size = (Small = 5, Medium = 10, Large = Small + Medium);
Das ist auch kein (echter) AufzählungsTyp, sondern so ein Spezialgewürge
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#14

AW: Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

  Alt 21. Apr 2023, 17:20
Danke, Himitsu!

[Edit]
Anzahl := Ord(Succ(High(MyType))); liefert die Meldung:
[dcc32 Fehler]E1012 Konstantenausdruck verletzt untere Grenzen
Anzahl := Succ(Ord(High(MyType))); Succ(High(MyType)) wird von Compiler als vom Typ MyType interpretiert und das gibt natürlich einen Overflow oder Range Check Fehler.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

AW: Wie läßt sich die Anzahl der Elemente eines AufzählungsTyps bestimmen?

  Alt 21. Apr 2023, 18:23
Ohhh, Na gut, inzwischen ist die blöde Bereichsprüfung nun standardmäßig aktiv,
aber hätte gedacht, die schlägt hier nur auf die "reale" Speichergröße (ein Byte = 256) an.

Mal ausprobieren, ob die auch meckert, wenn man was Größeres zuweisen will.
Test := MyType(123);

[add]
Jo, Zuweisen und Vergleichen geht immernoch,
aber beim Rechnen knallt es wirklich überall.
Delphi-Quellcode:
type
  MyType = (aa, bb, cc, dd, ee);

procedure TForm2.FormCreate(Sender: TObject);
begin
  var Test := MyType(5);
  Test := Pred(Test); // aka Dec(Test);
  if Test = High(MyType) then
    Beep;

  Test := MyType(6);
  Dec(Test);
  if Test = Low(MyType) then ;
end;
$2B or not $2B

Geändert von himitsu (21. Apr 2023 um 18:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz