3

Is there a C# method that returns to the upper-most caller, the Name of MY Method that threw an exception, even if the actual exception was thrown by another (e.g. database driver errors when my method calls it) ?

Caller -> MyMethod -> DbDriver(error)

I want "MyMethod", not "DbDriver"

I'd rather not re-throw exceptions all the way up the chain.

My current kludge, is to iterate through the StackTrace frames, and parse out my Method using MethodBase.GetCurrentMethod().DeclaringType.

Is there a built-in method to get this information or a more elegant solution?

Thanks!

EuroMarkus
  • 31
  • 1
  • 3

2 Answers2

16

Use Exception.TargetSite property to get the method name

Gets the method that throws the current exception.

Habib
  • 219,104
  • 29
  • 407
  • 436
  • I looked at `Exception.TargetSite`, but the problem is the property can return method names that are not **mine**. For example: if an ODBC error is thrown in my method, TargetSite will return the ODBC method name, rather than **my method name** that the error occured in. (I will edit my OP to make this a bit clearer) – EuroMarkus May 21 '13 at 09:49
  • @EuroMarkus, in that case your current approach for going through stack-trace frames is probably the way to go. I don't think there is a direct way available in .Net framework. – Habib May 21 '13 at 10:02
  • ex.TargetSite.Name – Usman Younas Mar 28 '16 at 15:17
0

You need the stack trace ability.

http://msdn.microsoft.com/de-de/library/system.environment.stacktrace(v=vs.80).aspx

icbytes
  • 1,831
  • 1
  • 17
  • 27