كيفية تحديد استثناء خاص في كومة استثناء
سؤال
ودعونا نفترض أن استثناء "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);
}
لا تنتمي إلى StackOverflow