Catch только исключения , с которыми вы можете справиться . Например, при использовании внешних ресурсов рекомендуется отлавливать определенных исключений, которые, как вы знаете, могут обрабатываться. В случае файлов это может быть (IOException, SecurityException и т. Д.), В случае базы данных исключением может быть SqlException или другие.
В любом случае, не перехватывает исключений, которые вы не обрабатываете , позволяйте им перетекать в верхний слой, который может. Или, если по какой-то причине вы перехватываете исключения, но не обрабатываете их, перебросьте их, используя throw; (что создаст операцию IL перебрасывания, а не trow).
В случае использования ресурсов, которые вы не знаете, какой тип исключений может генерировать, вы вынуждены перехватывать общий тип исключения. И в этом случае безопаснее всего было бы использовать указанные ресурсы из другого домена приложения (если это возможно) или позволить исключению всплыть на верхний уровень (без пользовательского интерфейса), где они могут отображаться или регистрироваться.