Каков список исключений, которые не могут быть пойманным в .NET? Или где я могу найти такой список?
Попробуйте это ... (протестировано на .NET Core 2.0)
System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(Type).GetType()).ToString()
A System.ExecutionEngineException
, который игнорирует все блоки try / catch / finally, выбрасывается, даже если он устарел, говоря, что среда выполнения НЕТ ДЛИННЫЕ БРОСЫ этого типа исключения. Странно, а?
Причиной этого может быть typeof(Type).GetType()
возвращает typeof(System.RuntimeType)
, который является внутренним типом и присущим среде исполнения. В System.Runtime.Serialization.FormatterServices.GetUninitializedObject
имеются аргументы относительно этих типов, например, typeof(string)
, но разработчики, вероятно, забыли проверить этот закрытый тип. В результате возвращается недействительный System.RuntimeType
. Когда вызывается ToString
, недопустимое состояние вызывает сбой среды выполнения.
SEHException не может быть пойман в некоторых случаях. Это может быть брошено неуправляемым кодом. Отличная SO тема по этой теме появляется здесь: SEHException не перехватывается Try / Catch