lo que puede conducir el lanzamiento para restablecer una pila de llamadas (estoy usando "throw", no "throw ex")

Siempre he pensado la diferencia entre "throw" y "throw ex"fue ese lanzamiento solo no estaba restableciendo el seguimiento de pila de la excepción.

Desafortunadamente, ese no es el comportamiento que estoy experimentando; Aquí hay una muestra simple que reproduce mi 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();
        }
    }
}

Esperaría que este código imprima una pila de llamadas a partir de la línea 14; sin embargo, la pila de llamadas comienza en la línea 18. Por supuesto, no es gran cosa en la muestra, pero en mi aplicación de la vida real, perder la información de error inicial es bastante doloroso.

¿Me estoy perdiendo algo obvio? ¿Hay otra manera de lograr lo que quiero (es decir, lanzar una excepción sin perder la información de la pila)

Estoy usando .net 3.5

Respuestas a la pregunta(3)

Su respuesta a la pregunta