如何使用try和catch捕获c#中的所有异常?

Gor*_*ram 41 c#

我想写一些尝试并捕获捕获任何类型或异常,这个代码是否足够(这是在Java中的方式)?

try {
code....
}
catch (Exception ex){}
Run Code Online (Sandbox Code Playgroud)

或者它应该是

try {
code....
}
catch {}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 56

两种方法都将捕获所有异常.您的两个代码示例之间没有显着差异,除了第一个将生成编译器警告,因为ex已声明但未使用.

但请注意,一些例外是特殊的,将自动重新抛出.

ThreadAbortException 是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发.

http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx


正如评论中所提到的,捕获和忽略所有异常通常是一个非常糟糕的主意.通常您想要执行以下操作之一:

请注意,在最后一种情况下,使用throw;和不使用重新抛出异常throw ex;.

  • Muflix你能详细说明为什么catch {}不会在发布模式[of?]中捕获所有异常? (8认同)

mat*_*hid 6

请注意,除了所有其他评论之外,还有一个小差异,为了完整起见,应在此处提及!

使用空 catch 子句,当程序集标记为“RuntimeCompatibility(WrapNonExceptionThrows = false)”(自 CLR2 以来默认为 true)时,您可以捕获非 CLSCompliant 异常。[1][2][3]

[1] http://msdn.microsoft.com/en-us/library/bb264489.aspx

[2] http://blogs.msdn.com/b/pedram/archive/2007/01/07/non-cls-exceptions.aspx

[3] CLR 是否会同时处理 CLS 投诉和非 CLS 投诉异常?