如何获取导致异常的方法的名称

SKu*_*mar 17 c# exception-handling try-catch

我的代码如下所示.

try
{
    _productRepo.GetAllProductCategories();
}
catch (Exception ex)
{
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来显示方法名称,假设在上面的例子中,如果在GetAllProductCategories()方法中抛出任何异常,我需要获取此方法名称,即"GetAllProductCategories()"作为我的结果.谁能建议我怎么做?

Ani*_*Ani 21

有一个TargetSite属性System.Exception应该派上用场.

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

在你的情况下,你可能想要这样的东西:

catch (Exception ex)
{
   MethodBase site = ex.TargetSite;
   string methodName = site == null ? null : site.Name;
   ...           
}
Run Code Online (Sandbox Code Playgroud)

值得指出列出的一些问题:

如果抛出此异常的方法不可用且堆栈跟踪不是空引用(在Visual Basic中为Nothing),则TargetSite从堆栈跟踪中获取方法.如果堆栈跟踪是空引用,则TargetSite也返回空引用.

注意:如果异常处理程序跨应用程序域边界处理异常,则TargetSite属性可能无法准确报告引发异常的方法的名称.

您可以StackTrace像@leppie建议的那样使用该属性,但请注意这是堆栈上帧的字符串表示形式; 所以如果你只想要抛出execption的方法的名称,你将不得不操纵.


lep*_*pie 1

查看堆栈跟踪。

这是一个例外的属性。