Сравнивая старый способ с новым способом обработки ошибок, используя фильтры Исключения, что для меня является преимуществом использования фильтров и когда я должен его использовать? есть ли сценарий, где я могу получить хорошее преимущество этой новой функции?В чем преимущество использования фильтров Exception и когда я должен их использовать?
Я читал о разворачивающемся стеке, но все же у меня нет сценария, где мы не можем справиться с этим по-старому. Объясните, мне 5, пожалуйста.
try
{
Foo.DoSomethingThatMightFail(null);
}
catch (MyException ex) when (ex.Code == 42)
{
Console.WriteLine("Error 42 occurred");
}
против
try
{
Foo.DoSomethingThatMightFail(null);
}
catch (MyException ex)
{
if (ex.Code == 42)
Console.WriteLine("Error 42 occurred");
else
throw;
}
Я знаю, что есть другая версия этого вопроса, проблема в том, что вопрос упоминания преимущества, которые я не могу на самом деле найти, например.
Фильтры исключений предпочтительнее ловить и реконструировать, потому что оставляют стоп невредимым. Если последующее исключение вызывает сброс стека , вы можете увидеть, откуда оно взялось, а не только последнее место, которое оно было сброшено.
после выполнения некоторых тестов, я не вижу разницы между обеими, я все еще вижу исключение из того места, он был вызваны повторно. Итак, или информация не подтверждена, я не понимаю фильтры Exception (именно поэтому я прошу), или я делаю это неправильно (также, пожалуйста, исправьте меня, если я ошибаюсь).
class specialException : Exception
{
public DateTime sentDateTime { get; } = DateTime.Now;
public int code { get; } = 0;
public string emailsToAlert { get; } = "[email protected]";
}
затем:
try
{
throw new specialException();
//throw new Exception("Weird exception");
//int a = Int32.Parse("fail");
}
catch (specialException e) when(e.code == 0)
{
WriteLine("E.code 0");
throw;
//throw e;
}
catch (FormatException e)
{
if (cond1)
{
WriteLine("cond1 " + e.GetBaseException().Message+" - "+e.StackTrace);
throw;
}
throw;
}
catch (Exception e) //when (cond2)
{
Console.WriteLine("cond2! " + e.Message);
throw;
}
Где вы находите, что цитата «Фильтры исключений предпочтительнее ...»? – mason
В вопросе, который они сказали, я дублировал. (http://stackoverflow.com/questions/27082069/what-benefit-does-the-new-exception-filter-feature-provide) –
У Томаса Левеска была хорошая запись [здесь] (http: //www.thomaslevesque. ком/2015/06/21/исключение-фильтры-в-с-6 /). Вы читали? Он делает несколько хороших моментов, потому что я использую стек и stacktrace взаимозаменяемо в моей голове, и его сообщение очистило это для меня. – mason