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.