Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Erwartete RangeError-Exception wird nicht ausgelöst
ml-kuen - Mo 06.05.13 23:09
Titel: Erwartete RangeError-Exception wird nicht ausgelöst
Hallo,
Folgender Code löst bei der Bedingung Index außerhalb des güligen Bereichs keine Exception aus. Die TypeInfo-Funktionen funktionieren aber und liefern den richtigen Aufzählungsnamen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| try Result:= TESeries(GetEnumValue(TypeInfo(TESeries), GetEnumName(TypeInfo(TESeries), Index))); except on Exception do ShowMessage(Format('Expected value between %d and %d, but got %d', [Ord(Low(ESeries)) , Ord(High(ESeries)), Index])); |
Bei einer Division durch 0 wird except hingegen angesprungen. Kann mir jemand einen Tipp geben?.
Michael
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
bummi - Di 07.05.13 07:28
GetEnumName verschiebt einen Pointer einfach um "Index" über die Namensliste ohne zu prüfen, was dabei herauskommt kann man schön zeigen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var ESeries:TESeries; index:Integer; begin
for index := 0 to 200 do
begin ListBox1.Items.Add(GetEnumName(TypeInfo(TESeries),index) +':'+IntToStr(Ord( GetEnumValue(TypeInfo(TESeries), GetEnumName(TypeInfo(TESeries),index))))); end; end; |
ml-kuen - Di 07.05.13 23:29
Hallo bummi,
dem ist nichts zu entgegnen oder hinzuzufügen.
Danke :D
Michael
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!