永远的SKYFEI
喜欢在阳光下,光着脊梁,挥汗如雨地工作,每次回头擦汗,看到的都是成就!

There three kind of catch ... throw method:

catch(Exception e)
            
{
                
throw e;
            }

            
catch(Exception)
            
{
                
throw;
            }

            
catch
            
{
                
throw;
            }

The last two method are the same, while the first is different.

The first method will swallow down the exception's StackTrace

Example:

 1class Class1
 2    {
 3        [STAThread]
 4        static void Main(string[] args)
 5        {
 6            try
 7            {
 8                Class1 app = new Class1();
 9                app.fun();
10            }

11            catch (System.Exception e)
12            {
13                Console.WriteLine(e.StackTrace);
14            }

15            Console.ReadLine();
16        }

17        
18        void fun()
19        {
20            try
21            {
22                throwE();
23            }

24            catch(Exception)
25            {
26                throw;
27            }

28        }

29        void throwE()
30        {
31            throw new Exception("my Exception");
32        }

33    }

the result is:

at ConsoleApplication1.Class1.throwE()
at ConsoleApplication1.Class1.fun()
at ConsoleApplication1.Class1.Main(String[] args)

if we change the fun() to :

 

 1        void fun()
 2        {
 3            try
 4            {
 5                throwE();
 6            }

 7            catch(Exception e)
 8            {
 9                throw e;
10            }

11        }

the result is:

at ConsoleApplication1.Class1.fun()
at ConsoleApplication1.Class1.Main(String[] args)

we lose the true throw exception trace, so avoid "throw e"

posted on 2006-09-27 17:05  skyfei  阅读(1303)  评论(5编辑  收藏  举报