避免在尝试/捕获块中出现警告"variable is declared but never used"



给定 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而不是在 VB 中throw ex,同时保留整个堆栈跟踪,如第一个 C# 示例中所示?


所有好的评论,并感谢您的冗余信息,我意识到完全不需要尝试/捕获,因为无论有没有尝试/捕获,都会发生这种情况。这个问题更多的是为了好奇心,我想,在(好的代码)现实中没有真正的基础的情况下。

我最近在一篇关于异常处理以及为什么要throw vs throw ex 的博客文章中看到了类似的东西,并且只是好奇如何在 VB 中完成相同的代码 - 因为我对 VB 并不强,并且正在尝试更好地理解它和异常处理。

曾希望我能够找到我上面引用的博客文章,但无法找到。 可以找到它的要点(产生问题):https://dotnetfiddle.net/741wAi

只需有一个空Catch,如下所示:

Try
     StartThings()
Catch
    Throw
End Try

但是,如果你除了重新扔掉它之外没有在Catch块中做任何事情,那么try-catch就没有必要排在第一位。

您可以在没有 try-catch 的情况下StartThings(),如果发生异常,异常将传播到调用方。

您收到 Catch ex As Exception 警告的原因是您在变量 ex 中捕获了异常,但您没有在任何地方使用它。

如果你只是抓住Exception那么你的代码是多余的,正如已经指出的那样。但是,如果您正在简化示例代码,并且您尝试仅捕获特定类型的异常并为其他抛出的Exception进行其他处理,那么我不想向您打破它,但似乎 VB 无法真正做到这一点,所以您将不得不忍受警告。显然不要扔前任。

最新更新