Я всегда считал, что разница между "throw" и "throw ex" заключалась в том, что в одиночку не было сброса stacktrace исключения.
К сожалению, это не то поведение, которое я испытываю; вот простой пример, воспроизводящий мою проблему:
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();
}
}
}
Я ожидаю, что этот код напечатает столбец, начинающийся с строки 14; однако столбец начинается с строки 18. Конечно, это не имеет большого значения в примере, но в моем реальном приложении, потеря исходной информации об ошибке довольно болезненна.
Я пропустил что-то очевидное? Есть ли другой способ достичь того, что я хочу (т.е. Повторить исключение, не теряя информацию о стеке?)
Я использую .net 3.5