У меня есть функция, чтобы постить элемент из словаря, если что-то пойдет не так, следует выбросить исключение. Код выглядит вполне нормально.W1035: Возвращаемое значение функции 'Take' может быть не определено
type
ENoSuchElementException = class(Exception);
var
FResults: TDictionary<Cardinal, TObject> = TDictionary<Cardinal, TObject>.Create;
FLock: TCriticalSection = TCriticalSection.Create;
/// <exceptions cref="ENoSuchElementException">Element does not exist</exceptions>
function Take(Id: Cardinal): TObject;
begin
FLock.Acquire;
try
try
Result := FResults[Id]; // here may throw exception
FResults.Remove(Id);
except
on E: Exception do
begin
raise ENoSuchElementException.Create(E.ToString);
end;
end;
finally
FLock.Release;
end;
end;
Но компилятор Delphi xe4 жалуется W1035: Return value of function 'Take' might be undefined
.
Я внезапно так смущен. Если выбрано исключение, почему код все еще ожидает возвращаемое значение? Означает ли это, что try...finally
будет есть исключение? Может ли кто-нибудь указать на проблему моего кода?
ПОСТАНОВИЛ: Как указывал Дэвид, try...except
следует переместить на наружную сторону. Благодаря!
Вздох. Разве у нас не было SSCCE? Теперь каждый из нас должен тратить время на создание. –
@ Давид, я обновил пример кода, теперь он должен быть более компактным. – stanleyxu2005
SSCCE действительно то, что необходимо –