在我的C#代码中显示错误“以前的catch子句已经捕获了这个或超类型`System.Exception'的所有异常”
问题描述:
显示错误“先前的catch子句已经catch子句已经捕获到这个或所有的异常在我的C#代码超类型`System.Exception的“”在我的C#代码中显示错误“以前的catch子句已经捕获了这个或超类型`System.Exception'的所有异常”
using System;
class Test {
static void Main() {
try{
int a=10,b=0,c=0;c=a/b ;
Console.WriteLine(c);
}
catch(System.Exception e) {
Console.WriteLine(e.Message);
}
catch(System.DivideByZeroException ex) {
Console.WriteLine(ex.Message);
}
}
}
答
异常处理程序,以便从顶部到底部,并且只有第一匹配异常处理程序被调用处理。因为你的第一个处理程序捕获了System.Exception
,并且所有的异常都来自于System.Exception
,它会捕获所有内容,而第二个处理程序永远不会执行。
多个异常处理的最佳做法是从特殊到一般命令他们,就像这样:
using System;
class Test {
static void Main() {
try{
int a=10,b=0,c=0;c=a/b ;
Console.WriteLine(c);
}
catch(System.DivideByZeroException ex) {
Console.WriteLine(ex.Message);
}
catch(System.Exception e) {
Console.WriteLine(e.Message);
}
}
}
如果你绝对肯定要处理System.Exception
第一(虽然我想不出一个理由),你可以写一个异常过滤器通过允许DivideByZero,像这样:
using System;
class Test {
static void Main() {
try{
int a=10,b=0,c=0;c=a/b ;
Console.WriteLine(c);
}
catch(System.Exception e)
when (!(e is DivideByZeroException)){
Console.WriteLine(e.Message);
}
catch(System.DivideByZeroException ex) {
Console.WriteLine(ex.Message);
}
}
}
注:每MSDN,you should avoid catching general exception types like System.Exception
。
问题在于顺序,首先放置'DivideByZeroException'。订单应该总是更具体一些,不太具体。 – juharr