Mark above is correct.
The stack trace is only preserved when thrown from another method.
The stack trace here will be preserved by including the original error being thrown from Method()
The following code illustrates this:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace throw_test
{
class Program
{
static void Main(string[] args)
{
try
{
try
{
// line 22 below
Method();
}
catch (Exception ex)
{
// line 30 below
throw;
}
}
catch (Exception ex)
{
Console.Write(ex.StackTrace);
}
Console.Read();
}
public static void Method()
{
throw new Exception();
}
}
}
Output
at throw_test.Program.Method() in c:\Users\Richard\Documents\Visual Studio 2013\Projects\using_throw_closestream\using_throw_closestream\Program.cs:line 43 at throw_test.Program.Main(String[] args) in c:\Users\Richard\Documents\Visual Studio 2013\Projects\using_throw_closestream\using_throw_closestream\Program.cs:line 30