Llamo, mediante reflexión, un método que puede causar una excepción. ¿Cómo puedo pasar la excepción a la persona que llama sin que el reflejo de la envoltura lo coloque? Estoy volviendo a lanzar la InnerException, pero esto destruye el seguimiento de la pila. Código de ejemplo:En C#, ¿cómo puedo volver a lanzar InnerException sin perder el seguimiento de pila?
public void test1()
{
// Throw an exception for testing purposes
throw new ArgumentException("test1");
}
void test2()
{
try
{
MethodInfo mi = typeof(Program).GetMethod("test1");
mi.Invoke(this, null);
}
catch (TargetInvocationException tiex)
{
// Throw the new exception
throw tiex.InnerException;
}
}
Hay otra manera de hacer esto que no requiere vudú. Eche un vistazo a la respuesta aquí: http://stackoverflow.com/questions/15668334/preserving-exceptions-from-dynamically-invoked-methods –
La excepción lanzada en el método llamado dinámicamente es la excepción interna de "Exception has sido lanzado por el objetivo de una invocación "excepción". Tiene su propio rastro de pila. Realmente no hay mucho más por lo que preocuparse. – ajeh