TStringListって、リクエストが範囲外になる場合、エラーになるんですが、
try
Result := TSList[i];
finally
Result := 'Nothing';
end;
では、範囲外と警告が出るので、tryの使い方い方が間違っていますか?
原始的に
if TSList.Count > i then Result := TSList[i]
else Result := 'Nothing';
リクエストiがTStringListの配列数より大きかったら、、、、って処理にしちゃいましたが。
try文の使い方が間違っている。
delphiにはtry〜except〜end;とtry〜finally〜end;の2つがあって
それぞれの違いは大雑把にいうと
・try〜except〜end;の場合
tryとexceptの間で例外が発生した場合のみexcept〜end;が実行される
・try〜finally〜end;の場合
tryとfinallyの間に入ったらfinally〜end;は必ず実行される
例外でなくてもexitやbreakやcontinueなどでも有効
例外処理でも使えるけど主にメモリ解放に使う
例えば
hoge := TStringList.crete;
try
〜
finally
hoge.free;
end;
と、すれば何があってもhogeは確実にメモリ解放できる
になるから今回の場合は
//finally
// Result := 'Nothing';
//end;
の部分が必ず実行されてしまうというわけ。
と、いうわけでexceptに書き換えればok
でも正直言って
//原始的に
//if TSList.Count > i then Result := TSList[i]
//else Result := 'Nothing';
//
//リクエストiがTStringListの配列数より大きかったら、、、、って処理にしちゃいましたが。
原始的じゃなくてこれが正しい姿だと思うが?
まあ両方とも行うのが一番いいんだけどね。