В C#, будет нумерующий страницы бросок кода 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 или просто добавить переменную-член для вашего нового исключения.
Здесь рассказывается, как добиться успеха в своей собственности. http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/
Это один из те программные вещи, которые люди любят пропускать, потому что это просто лишняя работа, чтобы заставить приложение работать.
Это страница из моего личного Дзэн программирования:
Ваша программа - ваш дом. Сделайте его настолько красивым, насколько сможете, чтобы в нем было легко и весело жить.