Как найти конкретное исключение в стеке исключений - PullRequest
2 голосов
/ 19 марта 2009

Предположим, что конкретное исключение "SomeException" является частью стека исключений,

так что давайте предположим, что ex.InnerException.InnerException.InnerException имеет тип "SomeException"

Есть ли в C # встроенный API, который будет пытаться найти данный тип исключения в стеке исключений?

Пример:

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));

Ответы [ 2 ]

6 голосов
/ 19 марта 2009

Нет, я не верю, что есть какие-то встроенные способы сделать это. Это не трудно написать, хотя:

public static T LocateException<T>(Exception outer) where T : Exception
{
    while (outer != null)
    {
        T candidate = outer as T;
        if (candidate != null)
        {
            return candidate;
        }
        outer = outer.InnerException;
    }
    return null;
}

Если вы используете C # 3, вы можете сделать его методом расширения (просто сделайте параметр "this Exception external"), и было бы еще лучше использовать:

SomeException nested = originalException.Locate<SomeException>();

(Обратите внимание также на сокращение имени - настройте на свой вкус:)

1 голос
/ 19 марта 2009

Это всего лишь 4 строки кода:

    public static bool Contains<T>(Exception exception)
        where T : Exception
    {
        if(exception is T)
            return true;

        return 
            exception.InnerException != null && 
            LocateExceptionInStack<T>(exception.InnerException);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...