Законно и возможно ли получить доступ к возвращаемому значению в блоке finally?

StackOverflow https://stackoverflow.com/questions/304847

Вопрос

Я хочу установить строку 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

что имеет очень разные последствия!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top