1. 程式人生 > 其它 >c# try catch 捕獲Inner Exception

c# try catch 捕獲Inner Exception

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;
}