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,则不需要它。