你能获取抛出异常的方法名吗?

3
有没有C#方法可以返回抛出异常的我的方法的最上层调用者的名称,即使实际异常是由其他方法(例如,当我的方法调用它时,数据库驱动程序错误)引发的?

调用者 -> MyMethod -> DbDriver(error)

我想要"MyMethod",而不是"DbDriver"

我不想一路向上重新抛出异常。

我的当前解决办法是,通过迭代StackTrace帧,并使用MethodBase.GetCurrentMethod().DeclaringType解析出我的方法。

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

谢谢!


4
您需要的信息是否就在堆栈跟踪中呢? - Arran
@Arran -- 它在堆栈跟踪中,但是以这种方式获取它对我来说感觉有点笨拙。 - EuroMarkus
我通过查看这个答案 https://dev59.com/yF4c5IYBdhLWcg3wXZUB 解决了问题。 - Sarath Subramanian
2个回答

16

我查看了 Exception.TargetSite,但问题是该属性可能返回不是我的方法名称的方法名。例如:如果在我的方法中抛出了ODBC错误,则TargetSite将返回ODBC方法名称,而不是发生错误的我的方法名称 - EuroMarkus
@EuroMarkus,如果是这样的话,你目前遍历堆栈跟踪帧的方法可能是正确的选择。我认为在.Net框架中没有直接可用的方法。 - Habib
ex.TargetSite.Name - Usman Younas


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接