使用catch没有参数
有什么区别:
catch { MessageBox.Show("Error."); }
和:
catch (Exception ex) { MessageBox.Show("Error."); //we never use ex, so is it better to use catch without arguments? }
从.NET 2开始,如果你不调整configuration? 没有。
在此之前,或者对一些configuration的调整,我不记得确切地说,有可能从非托pipe代码抛出的exception, 没有被转换成一个Exception
兼容的对象。
请注意,还有另一个选项,您可以指定types但不指定variables:
catch (Exception) { ... }
就我个人而言,即使没有logging ,也会非常警惕地捕捉exception。 如果你打电话给一个骨头的API可能是必需的,但通常最好避免它。
我认为他们是一样的。 但第二种情况提出了编译器警告,因为你声明了一个你没有使用的exception。 我很喜欢第一个,因为你明确地说,你不使用这个exception。 还有第三个
catch (Exception) { //do something }
如果你想指定exception的types,但不关心exception本身。
一般来说,你应该首先发现特定的错
但是,如果你像捕捉一般的Exception
,我会说使用第二种情况:
catch (Exception ex) { MessageBox.Show("Error."); //we never use ex, so is it better to use catch without arguments? }
这可以帮助你debbuging,因为variables包含堆栈跟踪,exception消息…等。 你可以用它来logging错误或者帮助你预防错误。
不过要非常小心,使用这种方法:
MessageBox.Show("Error.");
不跟踪你的错误(如日志文件)可能会导致一个非常大的混乱。
在第二个示例中,您可以引用exception数据,例如堆栈跟踪,源代码等。它还提供了一个有时会有帮助的常规消息。 它告诉你为什么你在debugging时遇到了一个非常重要的exception。
一些exception不能catch(Exception)
。
在linux下的mono下面,应该没有参数。
否则,运行时将忽略catch(Exception)
语句。
System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
如果遇到这样的问题,请尝试删除catch
语句的参数,logging上下文variables以找出错误原因。
PS我不知道如何在Windows上,在Windows中运行的程序是正常的。