Нет, я не верю, что есть какие-то встроенные способы сделать это. Это не трудно написать, хотя:
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>();
(Обратите внимание также на сокращение имени - настройте на свой вкус:)