C#学习教程:ReflectionMethodInfo.Invoke()捕获方法内部的异常该调用包含在一个try/catch块中,但它仍然不会捕获我正在调用的函数抛出的异常。我收到以下消息:用户未处理异常。为什么MethodInfo.Invoke()会阻止在Invoke()之外捕获异常?我怎样才能绕过它?编辑:据我了解你的问题,问题纯粹是一个IDE;您不喜欢VS将MethodInfo调用抛出的异常视为未捕获,但显然不是。您可以在此处阅读有关如何解决此问题的信息:WhydoestheIDEtreatTargetInvocationExceptionasuncaught?这似乎是一个错误/设计;但无论如何,这个答案中列出了体面的解决方法。在我看来,您有几个选择:您可以使用MethodInfo.Invoke,捕获TargetInvocationException并检查其InnerException属性。您将必须解决该问题中提到的IDE问题。您可以从MethodInfo创建一个适当的委托并调用它。使用这种技术,抛出的异常将不会被包装。此外,这种方法似乎与调试器配合得很好;我没有收到任何“未捕获的异常”弹出窗口。这是一个突出显示这两种方法的示例:classProgram{staticvoidMain(){DelegateApproach();方法信息方法();}staticvoidDelegateApproach(){try{Actionaction=(Action)Delegate.CreateDelegate(typeof(Action),GetMethodInfo());行动();}catch(NotImplementedExceptionnie){}}staticvoidMethodInfoApproach(){try{GetMethodInfo().Invoke(null,newobject[0]);}catch(TargetInvocationExceptiontie){if(tie.InnerExceptionisNotImplementedException){}}}staticMethodInfoGetMethodInfo(){returntypeof(Program).GetMethod("TestMethod",BindingFlags.NonPublic|BindingFlags.Static);;你是如何捕获异常的?通常,Invoke()会抛出System.Reflection.TargetInvocationException的包装异常实例。之后您的实际异常将在InnerException中。以上就是C#学习教程:ReflectionMethodInfo.Invoke()从方法内部捕获异常共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——试试{method.Invoke(target,params);}catch(TargetInvocationExceptionex){ex=ex.InnerException;//exnowstorestheoriginalexception}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
