Я думаю, что это меньше случай изменения трассировки стека и больше касается способа определения номера строки для трассировки стека.Испытание в Visual Studio 2010, поведение похоже на то, что вы ожидаете от документации MSDN: "throw ex;"перестраивает трассировку стека с точки этого оператора "throw;"оставляет трассировку стека такой, какой она есть, за исключением того, что когда бы ни возникало исключение, номер строки - это место повторного выброса, а не вызов, через который произошло исключение.
То же самое с «throw;»дерево вызовов методов остается неизменным, но номера строк могут измениться.
Я сталкивался с этим несколько раз, и это может быть сделано по замыслу и просто не документировано полностью.Я могу понять, почему они, возможно, сделали это, так как местоположение повторного броска очень полезно знать, и если ваши методы достаточно просты, исходный источник обычно все равно будет очевиден.
Как говорили многие другие, обычно этоЛучше всего не ловить исключение, если вы действительно не обязаны это делать, и / или вы собираетесь с ним разобраться на этом этапе.
Интересное примечание: Visual Studio 2010 даже не позволит мне построить код в том виде, как он представленв вопросе, так как он поднимает ошибку деления на ноль во время компиляции.