Kri*_*ner 5 c# vb.net try-catch stack-trace compiler-warnings
给出C#中的以下代码:
public void CatchExceptionThenThrow()
{
try
{
StartThings();
}
catch (Exception)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用dotnetfiddle VB.net转换器将其转换为VB
Public Sub CatchExceptionThenThrow()
Try
StartThings()
Catch As Exception
Throw
End Try
End Sub
Run Code Online (Sandbox Code Playgroud)
这会引发编译错误:
Catch As Exception
Run Code Online (Sandbox Code Playgroud)
声明结束预期
然后我改为:
Public Sub CatchExceptionThenThrow()
Try
StartThings()
Catch ex As Exception
Throw
End Try
End Sub
Run Code Online (Sandbox Code Playgroud)
但这会产生一个警告"变量已声明但从未使用过".如何在不获取警告的情况下进行throw而不是throw ex在VB中进行操作,同时保留整个堆栈跟踪,就像在第一个C#示例中一样?
所有好的评论,并感谢冗余信息,我意识到完全不需要try/catch,因为无论是否有try/catch都会发生这种情况.问题更多的是出于好奇心的缘故,我认为,在(一个好的代码)现实中没有真正的基础.
我最近在博客文章中看到过类似于异常处理的内容以及为什么要使用throwvs throw ex,并且对于如何在VB中完成相同的代码感到好奇 - 因为我对VB不太强大并且我想要更好地理解它,并且异常处理.
我曾希望能够找到我上面引用的博客文章,但却无法找到.它的要点(产生了问题)可以找到:https://dotnetfiddle.net/741wAi
只是有一个空的Catch像:
Try
StartThings()
Catch
Throw
End Try
Run Code Online (Sandbox Code Playgroud)
但是如果Catch除了重新投掷之外你没有在块中做任何事情,那么首先没有意义try-catch.
您可以StartThings()不使用try-catch,如果发生异常,异常将传播给调用者.
您收到警告的原因Catch ex As Exception是您在变量中捕获了异常,ex但您没有在任何地方使用它.