Я часто использую код по строкам:
function GetNumber(Handle : THandle) : Integer;
begin
FLock.BeginRead;
try
if FMap.TryGetValue(Handle, Object) then
raise EArgumentException.Create('Invalid handle');
Result := Object.Number;
finally
FLock.EndRead;
end;
end;
К сожалению, компилятор дает мне предупреждение для всех этих методов:
[DCC Warning] Unit.pas(1012): W1035 Return value of function 'GetNumber' might be undefined
Я знаю это предупреждение, но в этом случае я не вижу никакой причины для этого. Или есть сценарий, который мне не хватает, что приведет к значению результата undefined? Я понимаю предупреждение в случае try..except
, но для try..finally
это не имеет смысла для меня.
Вопросы:
- Есть ли причина для предупреждения?
- Как я могу избавиться от него (перемещение строки
Result := Object.Number
из блокировки не является опцией, и я хочу избежать написания совершенно ненужной строкиResult := 0
в верхней части каждой функции)
Спасибо!