获取引发异常的方法名我的代码如下。尝试{_productRepo.GetAllProductCategories();}catch(Exceptionex){//DoSomething}我需要一种方法来显示方法名称,假设在上面的示例中,如果GetAllProductCategories()方法中抛出任何异常,我需要获取此方法名称,即“GetAllProductCategories()”作为我的结果。谁能建议我该怎么做?System.Exception上有一个TargetSite属性,应该会派上用场。获取引发当前异常的方法。在你的情况下,你可能想要这样的东西:catch(Exceptionex){MethodBasesite=ex.TargetSite;字符串方法名=站点==空?空:站点名称;...}值得指出的是列出的一些问题:如果抛出此异常的方法不可用且堆栈跟踪不是空引用(在VisualBasic中为Nothing),则TargetSite从堆栈跟踪中获取方法。如果堆栈跟踪是一个空引用,TargetSite也会返回一个空引用。注意:如果异常处理程序跨应用程序域边界处理异常,则TargetSite属性可能无法准确报告引发异常的方法的名称。您也可以按照@leppie的建议使用StackTrace属性,但请注意,这是堆栈上帧的字符串表示;因此,如果您只想要抛出异常的方法的名称,则必须进行操作。它在StackFrame中...privatestringGetExecutingMethodName(){stringresult="Unknown";StackTrace跟踪=newStackTrace(false);输入type=this.GetType();for(intindex=0;index此方法用于Logging处理程序类,使用GetType()只是消除了Logging处理程序类中的方法作为最后执行的方法返回。由于编写Logging处理程序类不仅仅是为了做更多的事情记录异常,需要一个新的StackTrace对象。显然,可能不需要找到“抛出异常的方法”GetType()。如果您只想要堆栈的顶部,请获取第一帧,调用GetMethod()并返回它,或者只使用TargetSite。然后可以删除GetType()。还要注意,需要传入Exception才能创建StackTrace对象。例如:classProgram{staticvoidMain(string[]args){try{Test();}catch(Exceptionex){//无法正常工作-写入“Main”Console.WriteLine(MethodBase.GetCurrentMethod());//正确写入“TestConsole.Program.Test”Console.WriteLine(GetExecutingMethodName(ex));//正确写入“测试”Console.WriteLine(ex.TargetSite.Name);}控制台.ReadKey();}staticvoidTest(){thrownewException("测试");}privatestaticstringGetExecutingMethodName(Exceptionexception){vartrace=newStackTrace(exception);var框架=跟踪。获取帧(0);var方法=框架。获取方法();返回string.Concat(method.DeclaringType.FullName,".,method.Name);}}基本上,如果TargetSite()做了你想要的,那么就不要再继续了。但是,通常在Logging处理程序中,异常对象不可用(即跟踪和审计),因此需要一个新的StackTrace()对象来检索最后执行的方法,即Logging方法之前的方法。查看堆栈跟踪。这是异常的属性。以上就是C#学习教程:如何获取引发异常的方法名。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请指正点击右侧联系管理员删除。如需转载请注明出处:
