В С# будет ли следующий код throw e
содержать дополнительную информацию в стеке вызовов?
...
catch(Exception e)
{
e.Data.Add("Additional information","blah blah");
throw;
}
В С# будет ли следующий код throw e
содержать дополнительную информацию в стеке вызовов?
...
catch(Exception e)
{
e.Data.Add("Additional information","blah blah");
throw;
}
Да, будет. Многие разработчики не понимают, что следующий код будет генерировать новое исключение из этой точки в стеке вызовов, а не вызовы, сделанные ранее в стеке перед catch
.
...
catch(Exception e)
{
e.Data.Add("Additional information","blah blah");
throw e;
}
Я усвоил этот трудный путь!
var answer = "No";
try
{
try
{
throw new Exception();
}
catch (Exception e)
{
e.Data.Add("mykey", "myvalue");
throw;
}
}
catch (Exception e)
{
if((string)e.Data["mykey"] == "myvalue")
answer = "Yes";
}
Console.WriteLine(answer);
Console.ReadLine();
При запуске кода вы обнаружите, что ответ "да": -)
Исключения не являются неизменными, и возможность добавлять к ним информацию является одной из причин этого.
Итак, да, данные будут добавлены в информацию об исключении, которая будет активирована.
Вы можете это сделать, но из-за FxCop я всегда создавал пользовательские исключения, когда я бросаю и исключаю. Это дает вызывающей способности возможность легко поймать и понять различные типы ошибок. Если вам нужно включить последующее исключение, вы можете использовать InnerException of Exception или просто объявить переменную-член для нового Exception.
Это говорит вам, как сделать вас успешными. http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/
Это одна из тех программ, которые люди любят пропускать, потому что это просто дополнительная работа, чтобы получить функциональность приложения.
Это страница моего личного Zen программирования:
Ваша программа - ваш дом. Сделайте так же хорошо, как вы можете, поэтому легко и весело жить.