Duda con excepciones en .NET

Iniciado por SARGE553413, 12 Julio 2014, 16:51 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos.

Tengo un bloque 'try' dentro del cual hay 5 llamadas a metodos que lanzan InvalidOperationException.
Me gustaría saber, en el bloque 'catch', cuál de los 5 métodos ha lanzado la excepción, para imprimir el nombre del método por pantalla.

¿Cómo puedo saber que método ha lanzado la excepción, si todos lanzan la misma?

Gracias y saludos.

Eleкtro

#1
Puedes obtener el nombre del método que lanzó la excepcion, utilizando la propiedad Exception.TargetSite.

CitarGets the method that throws the current exception.

Nota: Pero antes de pensar en usarlo para todas las circunstancias, deberías leer las "Remarks" del MSDN.

Ejemplo de uso:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Test() Handles MyBase.Shown

       Try
           Me.Method1()
           Me.Method2()

       Catch ex As Exception
           MessageBox.Show(String.Format("Nombre del método: {0}", ex.TargetSite.Name))

       End Try

   End Sub

   Private Sub Method1()
       Exit Sub
       Throw New InvalidOperationException
   End Sub

   Private Sub Method2()
       Throw New InvalidOperationException
   End Sub

End Class


PD: También está disponible el nombre del método en el StackTrace, pero deberías parsear el String resultante, solo te lo comento como dato adicional porque sería una tontería hacer eso, ya que TargetSite obtiene el nombre desde el StackTrace, así que además si el StackTrace está vacío tampoco habrá un TargetSite accesible.

Saludos.








SARGE553413


elezekiel

exceelente ejemplo me fue de utilidad :D

gracias!!