在C#中给出以下代码:
public void CatchExceptionThenThrow()
{
try
{
StartThings();
}
catch (Exception)
{
throw;
}
}
我已经使用dotnetfiddle VB.net转换器将其转换为VB:
Public Sub CatchExceptionThenThrow()
Try
StartThings()
Catch As Exception
Throw
End Try
End Sub
这会在以下位置引发编译错误:
Catch As Exception
然后我将其改为:预期结束语
Public Sub CatchExceptionThenThrow()
Try
StartThings()
Catch ex As Exception
Throw
End Try
End Sub
但是这会创建一个警告"变量已声明但从未使用"。如何在没有得到警告的情况下进行throw
而不是throw ex
在VB中,在第一个C#示例中保留整个堆栈跟踪?
所有好的评论,并且感谢冗余信息,我意识到完全不需要try / catch,因为无论是否使用try / catch都会发生这种情况。问题更多的是出于好奇心的缘故,我认为,在(一个好的代码)现实中没有真正的基础。
我最近在一篇关于异常处理的博客文章中看到了类似的内容以及throw
vs throw ex
的原因,并且对于如何在VB中完成相同的代码感到好奇 - 就像我&#39 ;我对VB并不强烈,我试图更好地理解它,以及异常处理。
我曾希望能够找到我上面引用的博文,但却无法找到。可以找到它的主旨(产生问题):https://dotnetfiddle.net/741wAi
答案 0 :(得分:7)
只需要一个空的Catch
:
Try
StartThings()
Catch
Throw
End Try
但是如果你在Catch
区块中没有做任何事情而不是重新投掷它,那么就没有必要将try-catch
置于首位。
如果没有try-catch,您可以拥有StartThings()
,如果发生异常,异常将传播给调用者。
您收到Catch ex As Exception
警告的原因是您在变量ex
中捕到了异常,但您没有在任何地方使用它。
答案 1 :(得分:1)
如果您正在捕捉Exception
,那么您的代码就是多余的,正如已经指出的那样。但是,如果您正在简化示例代码,并且您只是尝试捕获特定类型的异常并对其他抛出的Exception
进行其他处理,那么我讨厌将它分解为您,但似乎VB可以&真的这样做,所以你必须忍受警告。显然不要扔前。