求教以下标注的2句作用?
using System;
class Test
{
   static void F(){
        try{
            G();
        }
        catch(Exception e){
            Console.WriteLine("Exception in F:"+e.Message);
            e=new Exception("F");       //1,这句好像程序根本就读不到?
            throw;                      //2,这句好像程序也根本就读不到?运行的结果为什么都是G,没有F呢,是不是先抛出G,而且解决了,就不继续抛出F了?
        }
}
    static void G(){
    throw new Exception("G");
}
    static void Main(){
    try{
            F();
    }
    catch(Exception e){
            Console.WriteLine("Exception in Main:"+e.Message);
     }
}
}
            
3。         e=new Exception("F");      
             throw;  
这两句是不是等价与throw new Exception("F");如果我把程序中的上2句换成这句,程序显示就不同了,那就说明不等价,那么他们有什么区别呢?

解决方案 »

  1.   

    1. 能读到
    2. throw后面什么都不写表示,重写抛出异常,你所catch的异常,而不是你新new出来的异常
    3. 不等价  throw后面什么都不写抛出的是原来的异常类型,throw new ....抛出的则是你new出来的异常类型,建议直接用throw,这样不会导致异常类型的信息丢失
      

  2.   

      e=new Exception("F"); //自己封装错误信息     
                throw e;  //抛出你封装的错误信息
    就是对的
    这两句不是等价关系,而是先后并且必须这样的关系,如果你要抛出你自定义的错误的话。