参考: how-to-catch-the-original-inner-exception-in-c
/// <summary> /// Get a inner exception /// </summary> /// <typeparam name="T">type of expected inner exception</typeparam> /// <param name="top">Top exception</param> /// <param name="foundException">Inner exception in top exception</param> /// <returns>Wether type of inner exception equals T</returns> public static bool TryFindInnerException<T>(Exception top, out T foundException) where T : Exception { if (top == null) { foundException = null; return false; } Console.WriteLine(top.GetType()); if (typeof(T) == top.GetType()) { foundException = (T)top; return true; } return TryFindInnerException<T>(top.InnerException, out foundException); }
try { //var a = 0; var b = 10 / a; //test other exception var webApp = WebApp.Start(url); } catch (System.Reflection.TargetInvocationException exception) { if (TryFindInnerException<HttpListenerException>(exception, out var httpListenerException)) { // handle HttpListenerException return; } throw exception; }