Come individuare un'eccezione particolare in uno stack di eccezioni
Domanda
Supponiamo che una particolare eccezione " SomeException
" fa parte dello stack delle eccezioni,
quindi supponiamo che ex.InnerException.InnerException.InnerException
sia di tipo " <=> "
Esistono API integrate in C # che tenteranno di individuare un determinato tipo di eccezione nello stack delle eccezioni?
Esempio:
SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException));
Soluzione
No, non credo che ci sia un modo per farlo. Non è difficile scrivere però:
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;
}
Se stai usando C # 3 potresti renderlo un metodo di estensione (basta fare il parametro " questa eccezione esterna ") e sarebbe ancora più bello usare:
SomeException nested = originalException.Locate<SomeException>();
(Nota anche l'accorciamento del nome: adattalo ai tuoi gusti :)
Altri suggerimenti
Sono solo 4 righe di codice:
public static bool Contains<T>(Exception exception)
where T : Exception
{
if(exception is T)
return true;
return
exception.InnerException != null &&
LocateExceptionInStack<T>(exception.InnerException);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow