Zachowanie oryginalnych StackTrace / LineNumbers w wyjątkach .NET

Zrozumienie różnicy międzyrzuć ex irzucać, dlaczego oryginalny przykład StackTrace został zachowany w tym przykładzie:

    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);
    }

Ale nie w tym:

    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;
        }
    }

Drugi scenariusz generuje taki sam wynik jakrzuć ex by?

W obu przypadkach oczekuje się wyświetlenia numeru linii, w którym y jest zainicjowane.

questionAnswers(2)

yourAnswerToTheQuestion