AVOID "throw e" !!!

it2022-05-09  14

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:

 1 class  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            try21            {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"

转载于:https://www.cnblogs.com/skyfei/archive/2006/09/27/516406.html


最新回复(0)