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 ERangeError
  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 user profile iconNarses: 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