避免警告"变量已声明但从未使用过"在try / catch块中

时间:2015-03-06 20:48:52

标签: c# vb.net try-catch stack-trace compiler-warnings

在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

2 个答案:

答案 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可以&真的这样做,所以你必须忍受警告。显然不要扔前。