Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “避免警告”;变量已声明但从未使用;在try/catch块中_C#_Vb.net_Try Catch_Stack Trace_Compiler Warnings - Fatal编程技术网

C# “避免警告”;变量已声明但从未使用;在try/catch块中

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

给出了C#中的以下代码:

我已使用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
但这会产生一个警告“变量已声明但从未使用”。如何在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