问题描述
我的code外观如下图所示。
My code looks as below.
try
{
_productRepo.GetAllProductCategories();
}
catch (Exception ex)
{
//Do Something
}
我需要一种方法来显示方法的名称,如果有异常的GetAllProductCategories扔在上述情况下假设()方法,我需要得到这个方法的名称,即GetAllProductCategories()作为我的结果。任何一个可以建议我如何做到这一点?
I need a way to show the method name, suppose in the above case if any exception is thrown in the GetAllProductCategories() method, I need to get this method name i.e. "GetAllProductCategories()" as my result. Can any one suggest me how to do this?
推荐答案
有一个<$c$c>TargetSite$c$c>财产上的 System.Exception的
应该派上用场了。
There's a TargetSite
property on System.Exception
that should come in handy.
获取抛出的方法
当前异常。
在你的情况,你可能想是这样的:
In your case, you probably want something like:
catch (Exception ex)
{
MethodBase site = ex.TargetSite;
string methodName = site == null ? null : site.Name;
...
}
这是值得指出的一些列的问题:
It's worth pointing out some of the issues listed:
如果抛出此方法
例外是不可用并且
堆栈跟踪是不是空引用
(在Visual Basic中为Nothing),TargetSite
从堆栈获得方法
跟踪。如果堆栈跟踪是一个空
参考TargetSite也返回
空引用。
注:TargetSite属性可能不
准确报告的名称
方法,其中,一个例外是
如果抛出异常处理程序
在整个处理异常
应用程序域边界。
Note: The TargetSite property may not accurately report the name of the method in which an exception was thrown if the exception handler handles an exception across application domain boundaries.
您可以使用堆栈跟踪
财产@leppie暗示过,但千万注意,这是一个字符串,再叠上的框架presentation;所以你必须操纵,如果你只想要的名称的那个扔execption方法。
You could use the StackTrace
property as @leppie suggests too, but do note that this is a string representation of the frames on the stack; so you'll have to manipulate if you only want the name of the method that threw the execption.
这篇关于如何获取导致异常的方法的名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!