c# try catch 捕获Inner Exception
参考: how-to-catch-the-original-inner-exception-in-c
TryFindInnerException
/// <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;
}