Сохранение исходных номеров StackTrace / LineNumbers в исключениях .NET
Понимание разницы междубросить экс а такжебросатьпочему оригинальный StackTrace сохранился в этом примере:
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);
}
Но не в этом:
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;
}
}
Второй сценарий производит тот же результат, что ибросить экс было бы?
В обоих случаях ожидается увидеть номер строки, где y инициализируется.