2013-04-12 2 views
-1

Я хочу запустить блок кода после операторов catch независимо от того, какое исключение происходит, но только тогда, когда происходит какое-то исключение. Таким образом, в основном это оператор finally, который требует исключения для выполнения. Есть ли простой способ сделать это в визуальных базовых?Visual Basic «Наконец, за исключением»

+1

Ну, что это? Независимо от каких-либо исключений, только на каком-то исключении? У вас не может быть этого. –

+0

Ваше первое предложение требует одновременного существования двух взаимоисключающих условий. Если вы дадите некоторый псевдокод, вы можете избежать голосования. Иногда вам просто нужно написать весь код, хотя он кажется обременительным. –

+0

Код будет тем, что опубликовал Джо Енос, но без логического. Тем не менее, я не думаю, что он существует в визуальной форме. – SteveDeFacto

ответ

0

Блок finally оператора If всегда будет вызываться независимо от того, есть ли возникшее исключение или нет. MSDN

Единственный способ сделать это - использовать другой метод, который принимает исключение в качестве параметра и вызывать этот метод из исключения catch.

+0

Lame ... Я хотел этого, чтобы было меньше кода, но решение, которое вы дали, сделало бы больше кода. О хорошо ... – SteveDeFacto

+0

Lame или не его спецификация Try ... Catch ... Наконец, блок –

0

Вы можете добавить различные блоки исключений, например:

Try 
    ' do operation 
' Most specific: 
Catch e As ApplicationException 
    ' do something only if ApplicationException has occurred 
' Least specific: 
Catch e As Exception 
    Console.WriteLine("{0} Second exception caught.", e); 
End Try 
+0

Если ApplicationException происходит, Exception не будет выполняться. – SteveDeFacto

+0

Да, это правильно, но разве это не то, что вам нужно? Вы хотите выполнить другой фрагмент кода в случае возникновения определенного исключения. Если есть код, который нужно выполнить для каждого исключения, вы можете извлечь его в метод и повторно использовать метод. Ключевое слово finally на самом деле не то, что вам нужно. Это именно то, что окончательно не предназначено для. Наконец, нужно всегда выполнять исключение или исключение. – Kenneth

1

Как насчет

Dim isException As Boolean = False 
Try 
    .... 
Catch ex As ApplicationException 
    isException = True 
    .... 
Catch ex As Exception 
    isException = True 
    .... 
Finally 
    If (isException) 
     .... 
    End If 
End Try 
+0

Не стоит. Только немного меньше кода, но также немного сложнее читать. – SteveDeFacto

+1

Мне нравится эта версия лучше - когда вы смотрите на код через 2 года, будет очевидно, что это делает, но с другой версией вы будете царапать голову о вложенном try/catch. –

1

мне не нравится это, но как насчет вложенного Try:

Try 
    Try 
     .... 
    Catch ex As ApplicationException 
     Throw 
    Catch ex As Exception 
     Throw 
    End Try 
Catch 
    ' This is your "finally" 
End Try 
+0

Не то, на что я надеялся, но это будет сделано. – SteveDeFacto

+0

На самом деле, бросать другое исключение вовсе не привлекательно. Тем не менее, упорные усилия. – SteveDeFacto

+1

Вы на самом деле не бросаете другое исключение, просто перебрасываете исключение, которое у вас уже есть, поэтому вы держите свою трассировку стека и все такое. Но я согласен, но не самый элегантный вид кода. –

Смежные вопросы