AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen ob Integer im Enumeration-Type enthalten ist
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob Integer im Enumeration-Type enthalten ist

Ein Thema von Keks · begonnen am 25. Jan 2015 · letzter Beitrag vom 27. Jan 2015
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 19:06
Die einfachste Art ist doch hier
Delphi-Quellcode:
type
  TMeinBeispiel = ( mbEins, mbZwei, mbDrei );
const
  MeinBeispielValues : array[TMeinBeispiel] of integer = ( 0, 1, 5 );
Wenn man das jetzt noch in einen Record packt, der die Umwandlung vornimmt, dann hat man doch alles zusammen und kann nach Belieben hin- und her konvertieren und das auch noch voll automatisch.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#12

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 21:04
Sorry, aber irgendwie verstehe ich Dein Beispiel nicht ... oder ich stehe auf dem Schlauch.
MeinBeispielValues[mbDrei] = 5 aber was mache ich damit? Die Zuordnung Ord(mbDrei) = 5 hatte ich doch vorher schon?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 21:10
Nein.

Ord(mbDrei) = 2

Der Enum ist "einfach", besitzt eine vollständige RTTI, aber diehn nur der als Namensliste.
Die eigentlichen Werte sind aber extern abgelegt und werden nur für's Casten benutzt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jan 2015 um 21:12 Uhr)
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#14

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 21:12
Ähm ...
Delphi-Quellcode:
type TMeinBeispiel = (mbEins=0, mbZwei=1, mbDrei=5);
begin
  ShowMessage(IntToStr(Ord(mbDrei))); // -> "5"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 21:29
Zitat:
Delphi-Quellcode:
type
  TMeinBeispiel = ( mbEins, mbZwei, mbDrei );
const
  MeinBeispielValues : array[TMeinBeispiel] of integer = ( 0, 1, 5 );


[edit]
"hatte" ... hatte "hab" gelesen.

Aber zusätzlich hast du so eben einen Code, wo man alle gültigen "Namen" auslesen kann und auch eine Liste (Array) mit allen gültigen Werten hat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jan 2015 um 21:36 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#16

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 26. Jan 2015, 08:28
Da sieht man mal wieder, weshalb Enums 'böse' sind.

Ich würde eine Funktion schreiben, die über ein 'CASE' die Validität des Integers prüft und mich dann um die wichtigen Dinge kümmern.
Delphi-Quellcode:
Function IsValidEnum (aValue : Integer) : Boolean;
Begin
  case TMyEnum(aValue) Of
     myFirstEnum,
     mySecondEnum,
     ...
     myLastEnum : result := True;
     else result := False;
  end
end;
Das ist häßlich, aber leicht verständlich, und schnell umgesetzt. Klar, kommt ein Enum dazu, muss ich das die case-label anpassen erweitern.

Vereinfachen (z.B. über RTTI) würde ich das nie, denn das verleitet dann zum Verwenden von Enums auch bei neuen Projekten.
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#17

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 27. Jan 2015, 12:15
Die Lösung von Dejan Vu ist für meinen Spezialfall vermutlich die passendste. Hatte da seltsamerweise nicht selbst dran gedacht, aber ich hatte ja ohnehin wohl fälschlicherweise angenommen, dass Delphi da eine eigene Abfragemöglichkeit mitbringt.
Die Möglichkeit per Array-Konstante von Sir Rufo würde natürlich auch gehen (mit dem Vorteil die Werte iterieren zu können), aber letzlich müssen die Werte dann getrennt vom Enum gepflegt werden (bei längeren Aufzählungen blos nicht die Werte vertauschen ) und zum Gültigkeits-Abfrage brauche ich ja doch wieder eine zusätzliche Funktion.

Aber ich habe wieder was gelernt und habe eine Lösung. Vielen Dank Euch Dreien!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 27. Jan 2015, 14:26
Statt der Funktion hatte ich mir, die ein/zwei Mal, wo ich sowas brauchte, eine Konstante direkt bei dem Typen deklariert.
Ist bei Änderungen auffälliger, als die Funktion außerhalb des Blickfeldes.

Delphi-Quellcode:
type
  TMyEnum = (a, b, c, z=25);

const
  cMyEnumRange = [a, b, c, z]; //cMyEnumRange: set of TMyEnum = [a, b, c, z];



var
  e: TMyEnum;
  s: set of TMyEnum;

if not (e in cMyEnumRange) then
  raise Exception.Create('');

if s - cMyEnumRange <> [] then
  raise Exception.Create('');
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#19

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 27. Jan 2015, 14:42
Können Enums nur Werte <=255 annehmen? Ansonsten eine sehr schöne Idee, zumal die Konstante direkt beim Enum deklariert werden kann: Wenn schon Schrott, dann wenigstens an einer Stelle.
  Mit Zitat antworten Zitat
Benutzerbild von NicoDE
NicoDE

Registriert seit: 16. Jul 2012
Ort: Darmstadt
26 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 27. Jan 2015, 14:55
Können Enums nur Werte <=255 annehmen?
Ein Delphi-Set is intern ein Bitfeld (wobei die Werte den Index angeben), welches auf 256 Bits limitiert ist (wahrscheinlich um "set of AnsiChar" zu unterstützen).
http://docwiki.embarcadero.com/RADSt...s_%28Delphi%29
Nico Bendlin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:48 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