C# 语法错误

本文关键字:错误 语法 | 更新日期: 2023-09-27 18:31:31

是语法错误还是编译错误?

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
            }
        }
    }
}

是语法错误吗?此错误是语法错误吗?谢谢

C# 语法错误

由于类型 Exceptioncatch 块是可能最不具体的异常处理程序,因此需要提供更具体的catch块不仅是多余的,而且在 C# 中这是一个编译时错误。因此,在多捕获块中,应始终最后指定最通用的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
            }
        }
    }
}

>Exception是一个比MyException更通用的类,这就是为什么你应该最后抓住它。正如Shaharyar所提到的,这是一个"语义错误"

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