Законно и возможно ли получить доступ к возвращаемому значению в блоке finally? - PullRequest
3 голосов
/ 20 ноября 2008

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

Ответы [ 3 ]

4 голосов
/ 20 ноября 2008

Единственный реальный способ сделать это в C # - объявить переменную в начале метода для хранения значения - т.е.

SomeType result = default(SomeType); // for "definite assignment"
try {
   // ...
   return result;
}
finally {
    // inspect "result"
}

В VB вы могли бы иметь возможность прямого доступа к результату - поскольку IIRC все равно работает, как указано выше (с именем метода как "result"). Предостережение: я действительно не VB человек ...

1 голос
/ 05 декабря 2008

Мне было интересно, можно ли в 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

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

1 голос
/ 20 ноября 2008

Объявите переменную из блока try и проверьте в блоке finally, если она была установлена.

...