- stack information is truncated if we are using throw ex
- where as stack information gets preserved in throw
throw ex - throw
throw - rethrow
class Program
{
static void Main(string[] args)
{
A aa = new A();
aa.Method1();
Console.Read();
}
}
class A
{
public void Method1()
{
try
{
B bb = new B();
bb.Method2();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
}
class B
{
public void Method2()
{
try
{
C cc = new C();
cc.Method3();
}
catch (Exception ex)
{
throw ex;
}
}
}
class C
{
public void Method3()
{
try
{
throw new InvalidOperationException();
}
catch (Exception ex)
{
throw ex;
}
}
}
throw
at CatchSample.C.Method3() in C:\temp\oops\oops\CatchSample\Program.cs:line 60
at CatchSample.B.Method2() in C:\temp\oops\oops\CatchSample\Program.cs:line 45
at CatchSample.A.Method1() in C:\temp\oops\oops\CatchSample\Program.cs:line 25
throw ex
at CatchSample.B.Method2() in C:\temp\oops\oops\CatchSample\Program.cs:line 45
at CatchSample.A.Method1() in C:\temp\oops\oops\CatchSample\Program.cs:line 25
Note: StackTrace information is lost in case of throw ex
Reference:
http://aspadvice.com/blogs/joteke/archive/2004/04/15/2277.aspx
http://geekswithblogs.net/sdorman/archive/2007/08/20/Difference-between-quotthrowquot-and-quotthrow-exquot-in-.NET.aspx
No comments:
Post a Comment