Ich habe die folgende Empfehlung gefunden:
http://www.delphi-treff.de/backstage...e/katalog/256/
Delphi-Quellcode:
procedure TMyClass.DoSomething;
var i: Integer;
begin
for i := 0 to High(FMyField) do
begin
try
FMyField[i].DoIt;
except
ShowMessage('Invalid: ' +
IntToStr(i));
end;
end;
end;
Damit die For-Schleife ohne eine interne
Exception-Behandlung auskommt, die die Schleife verlangsamt,
wird dieses empfohlen.
Delphi-Quellcode:
procedure TMyClass.DoSomethingIntern(
StartIndex: Integer);
var ExceptionRaised: Boolean;
begin
ExceptionRaised := False;
try
for i := StartIndex to High(FMyField) do
begin
StartIndex := i;
FMyField[i].DoIt;
end;
except
ExceptionRaised := True;
ShowMessage('Invalid: ' +
IntToStr(i));
end;
if ExceptionRaised then
DoSomethingIntern(StartIndex + 1);
end;
procedure TMyClass.DoSomething;
begin
DoSomethingIntern(0);
end;
Meiner Meinung jedoch, kommt hier ein anderes Problem hinzu.
Die Prozedur wird rekursiv aufgerufen. Bei einer großen Menge von Fehlern, kann es leicht zu einem Stackoverflow kommen. Der Stack wird zu klein.
Wäre das eine Lösung?
Delphi-Quellcode:
procedure TMyClass.DoSomething;
var i : Integer;
label RestartLoop;
begin
i := 0;
RestartLoop:
try
while i <= High(FMyField) do
begin
StartIndex := i;
FMyField[i].DoIt;
Inc(i);
end;
except
ExceptionRaised := True;
ShowMessage('Invalid: ' +
IntToStr(i));
Inc(i);
end;
if i <= High(FMyField) then
goto RestartLoop;
end;