[Lazarus] Break in 'case...of' block.

patspiper patspiper at yahoo.com
Sun Aug 22 11:13:49 CEST 2010


On 08/22/2010 10:10 AM, Dave Coventry wrote:
> I have a function that tests for a series of different conditions
> according to a value in a 'case...of' block.
>
> Result:=false;
> mylist:=TStringlist.Create;
> case i of
>    1:
>     begin
>        if condition1 then
>        begin
>           Result:=true;
>           break;
>        end;
>        if condition2 then
>        begin
>           Result:=true;
>           break;
>        end;
>        if condition3 then
>        begin
>           Result:=true;
>        end;
>     end;
>     2:....;
>     3:....;
> end;
> mylist.free;
>
> The above does not work as the 'case...of' is not considered to be a loop.
> Error: BREAK not allowed.
>
> I could just exit the function, using 'exit' instead of 'break' but I
> think I need to free the mylist TStrings.
>
> Is there a way of doing this or is my best way just to replace 'break'
> with 'mylist.free' and 'exit'?
>
> --
>    
You should use Else. But if you insist on break, you can insert a dummy 
repeat/until loop:

Result:=false;
mylist:=TStringlist.Create;
repeat
case i of
   1:
    begin
       if condition1 then
       begin
          Result:=true;
          break;
       end;
       if condition2 then
       begin
          Result:=true;
          break;
       end;
       if condition3 then
       begin
          Result:=true;
       end;
    end;
    2:....;
    3:....;
end;
until true
mylist.free;




More information about the Lazarus mailing list