【问题标题】:Can you get Method name that threw Exception?你能得到抛出异常的方法名称吗?
【发布时间】:2013-05-16 00:05:32
【问题描述】:

是否有一个 C# 方法返回到最上面的调用者,MY Method 的名称会引发异常,即使 实际异常 是由另一个引发的(例如,当我的方法调用它时出现数据库驱动程序错误)?

调用者 -> MyMethod -> DbDriver(错误)

我想要“MyMethod”,而不是“DbDriver”

我宁愿不要在整个链条上重新抛出异常。

我当前的任务是遍历 StackTrace 帧,并使用 MethodBase.GetCurrentMethod().DeclaringType 解析出我的方法。

是否有内置方法来获取此信息或更优雅的解决方案?

谢谢!

【问题讨论】:

  • 您需要的信息不只是在堆栈跟踪本身吗?
  • @Arran -- 是在堆栈跟踪中,我觉得以这种方式获取它有点笨拙。
  • 我通过检查这个答案解决了stackoverflow.com/questions/27997276/…

标签: c# .net exception stack-trace


【解决方案1】:

使用Exception.TargetSite属性获取方法名

获取抛出当前异常的方法。

【讨论】:

  • 我查看了Exception.TargetSite,但问题是该属性可以返回不是我的的方法名称。例如:如果在我的方法中抛出 ODBC 错误,TargetSite 将返回 ODBC 方法名称,而不是发生错误的 我的方法名称。(我将编辑我的 OP 以使其稍微更清晰)
  • @EuroMarkus,在这种情况下,您当前通过堆栈跟踪帧的方法可能是要走的路。我认为 .Net 框架中没有直接可用的方法。
  • ex.TargetSite.Name
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
相关资源
最近更新 更多