Nel mio codice mi sto imbattendo in una situazione in cui viene generato un System.Reflection.TargetInvocationException
. In un caso specifico so come voglio gestire l'eccezione di root, ma voglio lanciare tutte le altre eccezioni. Posso pensare a due modi per farlo, ma non sono sicuro di quale sia il migliore.Controllo del tipo di un'eccezione interna
1.
try
{
//code
}
catch (System.Reflection.TargetInvocationException ex)
{
if (typeof(ex.InnerException) == typeof(SpecificException))
{
//fix
}
else
{
throw ex.Innerexception;
}
}
2.
try
{
//code
}
catch (System.Reflection.TargetInvocationException ex)
{
try
{
throw ex.InnerException;
}
catch (SpecificException exSpecific)
{
//fix
}
}
Sono consapevole che generare eccezioni, in generale, è lento, quindi mi sento il primo metodo sarebbe forse essere più veloce. In alternativa, c'è un modo migliore per farlo a cui non ho pensato?
2 è affascinante, imho 1 è più leggibile e probabilmente meglio da un punto di vista delle prestazioni. – Gabber
Domanda: qual è la chiamata che lancia "TargetInvocationException"? È il tuo codice o di terze parti? –
E 'generato il codice che sta leggendo dal db. – geekchic