Из моего исследования этот вопрос был задан очень часто в первые дни сети точек, но IMHO много ответов было немного смехотворным и " это то, как мы делаем это сейчас. Посмотрим, немного ли выросла сеть.Современный подход к 'по ошибке goto [catch-all] label' in C#
Пример Circa 1992:
Sub Main()
On Error GoTo ErrHand
....Code Here
End Sub
ErrHand:
' raise error nicely here inc error no, desc, line & character pos
End Sub
неуклюжим, как это было, «по ошибке Гото [уловам все] ярлык» подход, доступный для VB6 было использование, которое должно было поймать неожиданные исключения и сообщать о них. Он может сообщать описание ошибки с номером &, с модулем, номером строки и положением символа исключения. Разумные разработчики, конечно, могли бы кодировать ожидаемые исключения и исключения из бизнес-логики. Ошибка на ошибке была очень полезным ответом на отсутствие хрустального шара.
Мои приятели C# говорят мне использовать try-catch, но в то же время они говорят, что народные знания говорят о том, чтобы не прикладывать большой улов к каждому методу, потому что это плохая практика.
Но когда я задаю вопрос о точном источнике народного знания, ответа нет.
Итак, что представляет собой ответ 2016 для C# equiv VB6 'на конструкцию ошибок goto [catch-all] label, и почему я не могу стандартизировать try-catch, обертывая содержимое каждого модуля на эффект такой же непредвиденной обработки исключений?
Считается, что это плохо, чтобы попробовать/поймать все? да, почему, когда это было хорошо до этого ... задолго до того, как у нас не было ряда вещей, которые у нас есть сейчас. теперь мы можем протестировать значения NULL и значений в одном ударе с помощью if (stuff? .somethingelse == blah), поэтому он не имеет значения barf для нулей, мы можем проверять числовые преобразования с помощью tryparse, главное правило - это гораздо более локализованные тесты. Код развился, и возврат к vb6 похож на сравнение жизни с 40 лет назад. Так много изменилось, что трудно сравнивать. – BugFinder
try {/ * ... Код здесь * /} catch (Exception ex) {...}. Прямой перевод, не хуже и не лучше, чем подход VB. Как верхний уровень catch-em-all в начальной точке Main(), это не ужасная практика, но вы обычно предпочитаете подписку на событие AppDomain.CurrentDomain.UnhandledException. –
@BugFinder благодарит ваши мысли. Я не ищу здесь ленивого решения - больше пояса и брекетов. Исключения будут происходить. Мы прилагаем все усилия, чтобы справиться с тем, мы ожидаем, что в соответствии с вашими комментариями. Как владелец приложения, я хочу получить самое быстрое исправление, когда мы получаем исключение в реальном времени - это означает, что мне нужна информация.Это означает, что я должен поймать исключение и опросить его, чтобы получить как можно больше подсказок. Отсюда мой вопрос. Я решил упомянуть VB6 как быстрый способ установить контекст. 40-летний разработчик MS-инструментов не обязательно означает, что нам лучше. –