C#中的Catch and Catch(例外e)
我猜这三部分代码没有区别,不是吗?
try { // ............. } catch { // ............. }
和
try { // ............. } catch(Exception) { // ............. }
和
try { // ............. } catch(Exception e) { // ............. }
但是,当我应该使用第一个和第二个时,我几乎是精明的。 但我希望你能说出你的想法。
第一个也将捕获不是exception的抛出对象。
( 这可能发生在符合非CLS的代码中 )
如果您实际上没有使用exception变量,则第二个不会给出编译器警告。
仅当您确实需要检查抛出的exception(例如,记录它)时,才应使用第三个。
这些代码有点不同。
第一个不允许您从发生的exception中获取任何信息。 它会抓住任何东西,但你不会有任何线索被捕获。
第二个不允许你做任何事情,但至少让你指定什么样的例外。 在您的示例中,由于您已指示Exception
,因此它将捕获从Exception
派生的所有内容。 但它可以改变以微调被捕获的东西 – 但仍然允许你不做任何事情。
第三个让你实际访问exception并从中获取信息。
第三种情况实际上是这样的:
当try块中的一行发生exception时,会创建一个对应exception的对象。 包含(Exception e)
的catch块实际上有一个Exception
类变量e
作为其参数。 然后将exception对象的引用复制到此引用变量。 您现在可以根据需要使用此e变量来识别引发的exception类型,例如e.message()
给出与exception相关的描述。
Slaks已经很好地解释了第一个和第二个案例
这取决于。 我不知道前两者之间的区别。
如果要在catch块中使用exception,即获取堆栈跟踪或其他信息,则必须使用最后一个,以便有一个对象可供引用。
如果您只是为其他人处理exception,则不需要它。