o que pode levar o throw a redefinir uma pilha de chamadas (estou usando "throw", não "throw ex")

Eu sempre pensei a diferença entre "jogar" e "jogar ex"foi que o lançamento sozinho não estava redefinindo o rastreamento de pilha da exceção.

Infelizmente, esse não é o comportamento que estou experimentando; Aqui está uma amostra simples que reproduz meu problema:

using System;
using System.Text;

namespace testthrow2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                try
                {
                    throw new Exception("line 14");
                }
                catch (Exception)
                {
                    throw; // line 18
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());

            }
            Console.ReadLine();
        }
    }
}

Eu esperaria que esse código imprima uma pilha de chamadas começando na linha 14; no entanto, a pilha de chamadas começa na linha 18. É claro que não é grande coisa na amostra, mas no meu aplicativo da vida real, perder as informações de erro inicial é bastante doloroso.

Estou perdendo algo óbvio? Existe outra maneira de alcançar o que eu quero (ou seja, lançar uma exceção sem perder as informações da pilha?)

Estou usando .net 3.5

questionAnswers(3)

yourAnswerToTheQuestion