C# 在我的C代码中显示错误“先前的catch子句已捕获此类型的所有异常或超级类型'System.Exception'”
显示错误前一个catch子句已catch子句已捕获此类型的所有异常或C代码中的超级类型“System.Exception”C# 在我的C代码中显示错误“先前的catch子句已捕获此类型的所有异常或超级类型'System.Exception'”,c#,asp.net,visual-studio,visual-studio-2010,C#,Asp.net,Visual Studio,Visual Studio 2010,显示错误前一个catch子句已catch子句已捕获此类型的所有异常或C代码中的超级类型“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
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);
}
}
}
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);
}
}
}
如果您必须绝对积极地首先处理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);
}
}
}
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,.异常处理程序按从上到下的顺序进行处理,并且只调用第一个匹配的异常处理程序。因为第一个处理程序捕获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);
}
}
}
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);
}
}
}
如果您必须绝对积极地首先处理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);
}
}
}
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,.问题在于顺序,只需将DivideByZeroException放在第一位。顺序应该总是更具体到更不具体。问题是顺序,只需将DivideByZeroException放在第一位。订单应始终更具体到不太具体。