C# “避免警告”;变量已声明但从未使用;在try/catch块中
给出了C#中的以下代码: 我已使用dotnetfiddle VB.net转换器将其转换为VB:C# “避免警告”;变量已声明但从未使用;在try/catch块中,c#,vb.net,try-catch,stack-trace,compiler-warnings,C#,Vb.net,Try Catch,Stack Trace,Compiler Warnings,给出了C#中的以下代码: 我已使用dotnetfiddle VB.net转换器将其转换为VB: Public Sub CatchExceptionThenThrow() Try StartThings() Catch As Exception Throw End Try End Sub 这会在以下对象上引发编译错误: Catch As Exception 预期报表结束 然后我将其改为: Public Sub CatchException
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
但这会产生一个警告“变量已声明但从未使用”。如何在VB中执行throw
ing而不是throw ex
ing而不获得警告,同时像第一个C#示例那样保留整个堆栈跟踪
所有好的评论,感谢冗余信息,我意识到try/catch完全不需要,因为无论有没有try/catch,都会发生这种情况。我想,这个问题更多是出于好奇,在一个场景中,我认为,在(一个好的代码)现实中没有真正的基础 我最近在一篇关于异常处理的博客文章中看到了类似的内容,以及为什么要
抛出
而不是抛出ex
,我只是好奇如何在VB中完成相同的代码——因为我对VB不太在行,我正试图更好地理解它,以及异常处理
我本来希望我能找到上面提到的博客文章,但没能找到。可以找到它的要点(产生了这个问题):只要有一个空的
Catch
,比如:
Try
StartThings()
Catch
Throw
End Try
但是如果您在Catch
块中除了重新抛出它之外没有做任何事情,那么首先让try Catch
是没有意义的
您可以在不使用try-catch的情况下使用StartThings()
,如果出现异常,异常将传播到调用方
您因
Catch ex As Exception
而收到警告的原因是您在变量ex
中捕获了异常,但您没有在任何地方使用它 如果您只是捕获异常
,那么您的代码是多余的,正如前面指出的那样。但是,如果您正在简化示例代码,并且您试图只捕获特定类型的异常,并对其他抛出的异常执行其他处理,那么我不想打断您,但VB似乎无法真正做到这一点,因此您必须忍受警告。显然,不要抛出ex.为什么一开始就抛出所有有用的信息?更妙的是,如果只是隐藏异常信息,为什么还要捕获?这整件事都很臭。try{StartThings();}catch(Exception){throw;}
在语义上与StartThings()相同代码>@BradleyDotNET我怀疑moarboilerplate是在指出没有信息丢失,这正是你的第一条评论所暗示的。@BradleyDotNET可能在重新引用异常之前计划做些什么,但他在那里做的与问题无关,因此没有费心发布。@Willden是的,我在那句话中是不正确的。人们总是可以不做任何事情的方式使用变量,只是为了关闭编译器,即GC.KeepAlive(ex)代码>或类似的东西。@Servy-Heh,是的,这也是一个选项。
Try
StartThings()
Catch
Throw
End Try