代码之家  ›  专栏  ›  技术社区  ›  shilpa suresh

在我的C#代码中显示错误“前一个catch子句已捕获此类型或超类型'System.Exception'的所有异常”

  •  1
  • shilpa suresh  · 技术社区  · 7 年前

    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); 
            } 
        } 
    }
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   John Wu    7 年前

    异常处理程序按从上到下的顺序进行处理,只调用第一个匹配的异常处理程序。因为你的第一个处理者抓住了 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); 
            } 
        } 
    }
    

    如果你必须积极处理 系统例外 首先(尽管我想不出原因)可以编写一个异常过滤器,允许通过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); 
            } 
        } 
    }
    

    you should avoid catching general exception types like System.Exception .