سؤال

ودعونا نفترض أن استثناء "SomeException" على وجه الخصوص هو جزء من كومة استثناء،

لذلك دعونا نفترض ex.InnerException.InnerException.InnerException هو من نوع "SomeException"

هل هناك أي المدمج في API في C # التي ستحاول تحديد نوع الاستثناء الوارد في كومة استثناء؟

مثال:

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
هل كانت مفيدة؟

المحلول

لا، لا أعتقد أن هناك أي بني في طريقة للقيام بذلك. ليس من الصعب أن يكتب على الرغم من:

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 هل يمكن أن تجعل من طريقة تمديد (فقط جعل المعلمة "هذا استثناء الخارجي") وسيكون أجمل حتى الاستخدام:

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

و(لاحظ تقصير اسم أيضا - ضبط لذوقك الخاص:)

نصائح أخرى

وانها مجرد 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top