Законно и возможно ли получить доступ к возвращаемому значению в блоке finally?
Вопрос
Я хочу установить строку usererror перед выходом из функции, в зависимости от кода возврата и переменной в функции.
У меня сейчас есть:
Dim RetVal as RetType
try
...
if ... then
RetVal = RetType.FailedParse
end try
endif
...
finally
select case RetVal
case ...
UserStr = ...
end select
end try
return RetVal
Можно ли использовать return RetType.FailedParse, а затем обращаться к нему в блоке finally?
Решение
Единственный реальный способ сделать это в C # - объявить переменную в начале метода для хранения значения - т.е.
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
В VB вы могли бы иметь возможность прямого доступа к результату - поскольку IIRC все равно работает, как указано выше (с именем метода как " result ") в любом случае. Предостережение: я действительно не VB человек ...
Другие советы
Объявите переменную из блока try и проверьте в блоке finally, была ли она установлена.
Мне было интересно, можно ли (на законном основании) сделать в VB:
Public Function MyFunc() as integer
Try
if DoSomething() = FAIL Then
return FAIL
end if
Finally
if MyFunc = FAIL then
Me.ErrorMsg = "failed"
endif
End Try
End Function
Я знаю, что настройка MyFunc = FAIL допустима (как похмелье от VB), это только для записи или для чтения? Я обеспокоен тем, что это плохое кодирование как
if MyFunc = FAIL Then
слишком похож на
if MyFunc() = FAIL Then
что имеет очень разные последствия!