Я буду несколько противоречить здесь, так как почти каждая рекомендация, которую я когда-либо видел, будет предлагать (иногда яростно), что вы должны проверять только определенные ожидаемые вами исключения («белый список» исключений, которые вы можете обработать).
Однако, учитывая отсутствие концепции проверенных исключений в .NET, во многих случаях вы никогда не можете быть уверены, какие исключения будут выброшены, особенно в слабосвязанных приложениях. Например, если я внедрил реализацию шифрования с использованием IoC, кто может дать мне исчерпывающий список всех возможных исключений, которые могут возникнуть в текущих и будущих версиях классов криптографии .NET?
В таких случаях разумно иметь «черный список» исключений, которые вы не хотите обрабатывать, например, вы можете сделать что-то вроде:
try
{
...
}
catch(Exception ex)
{
if (IsInBlackList(ex))
{
throw;
}
... code to recover from exception ...
}
Прецеденты для этого есть в самой .NET Framework, например, System.Windows.Forms.Application.CommonAppDataPath
делает именно это, используя внутренний метод ClientUtils.IsSecurityOrCriticalException
для определения своего «черного списка».