2014-11-23 56 views
-1

它是语法错误还是编译错误?C#语法错误

using System; 

namespace AAA 
{ 
    class MyException : Exception{ 

    } 
    class My2Exception : MyException{ 

    } 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      try{ 
       throw new MyException(); 
      } 
      catch(Exception e){ // compiler says that this catch all exception occur   error? Is it syntax error? 
      } 
      catch(MyException m){ // Syntax error 
      } 
     } 
    } 
} 

这是一种语法错误吗? 此错误语法错误? 谢谢

+0

我没有真正做出这样的错误,但在C#类似的错误不要被编译,而是抓被R#抓住了。例如,在'return'或'break'语句之后放置额外的分支逻辑(它会给你一个'检测到不可到达的代码'的警告,但不是错误)。这可能是这里发生的事情吗? – theMayer 2014-11-27 13:47:34

回答

7

由于catchException是最不具体的异常处理程序可能的类型,以提供一个更具体的catch块需要的是不仅多余的,但在C#这是一个compile time error。因此,在多catch块,你应该总是指定最通用的catch块最后:

using System; 

namespace AAA 
{ 
    class MyException : Exception 
    {  

    } 

    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      try 
      { 
       throw new MyException(); 
      } 
      catch (MyException m) 
      { 
       //TODO: something 
      } 
      catch (Exception e) 
      { 
       //TODO: something 
      } 
     } 
    } 
} 
4

Exception是比MyException更普遍的类,这就是为什么你应该赶上它。 如所提到的由沙哈里亚尔它一个“语义错误”

try{ 
    throw new MyException(); 
} 
catch(MyException m){ 
} 
catch(Exception e){ // Syntax error 
} 
+1

我知道:D 但它是“语法错误”? 还是什么样的错误? – 2014-11-23 16:28:20

+2

@Gui_C好吧,它不是一个语法错误,因为一切都是使用有效的C#语法编写的。只是编译时错误 – 2014-11-23 16:31:47

+0

它的语义错误 – Shaharyar 2014-11-23 16:32:43