Preservando StackTrace / LineNumbers original en .NET Exceptions

Entendiendo la diferencia entrelanzar ex ylanzar, ¿por qué se conserva el StackTrace original en este ejemplo:

    static void Main(string[] args)
    {
        try
        {
            LongFaultyMethod();
        }
        catch (System.Exception ex)
        {
            Console.WriteLine(ex.StackTrace);
        }
    }

    static void LongFaultyMethod()
    {
        try
        {
            int x = 20;
            SomethingThatThrowsException(x);
        }
        catch (Exception)
        {
            throw;
        }
    }

    static void SomethingThatThrowsException(int x)
    {
        int y = x / (x - x);
    }

Pero no en este:

    static void Main(string[] args)
    {
        try
        {
            LongFaultyMethod();
        }
        catch (System.Exception ex)
        {
            Console.WriteLine(ex.StackTrace);
        }
    }

    static void LongFaultyMethod()
    {
        try
        {
            int x = 20;
            int y = x / (x - 20);
        }
        catch (Exception)
        {
            throw;
        }
    }

El segundo escenario es producir la misma salida quelanzar ex ¿haría?

En ambos casos, uno espera ver el número de línea donde se inicializa y.

Respuestas a la pregunta(2)

Su respuesta a la pregunta