在反射调用中如何处理 `TARGETInvocationException` 抛出的内部异常?
时间: 2024-09-06 14:07:14 浏览: 70
System.Reflection.TargetInvocationException(解决方案).md
在使用反射调用方法时,`TargetInvocationException` 是 `System.Reflection.TargetInvocationException` 的一个异常类,它是从方法调用中抛出的异常的封装。当你调用一个反射方法并它内部抛出异常时,你可能会捕获到一个 `TargetInvocationException` 而不是实际的异常。要处理这个异常,你需要检查 `TargetInvocationException` 的内部异常,如下:
```csharp
try
{
// 反射调用方法
MethodInfo methodInfo = typeof(TheClass).GetMethod("TheMethod");
object obj = Activator.CreateInstance(typeof(TheClass));
methodInfo.Invoke(obj, new object[] { /* 方法参数 */ });
}
catch (TargetInvocationException tie)
{
// 获取内部异常
Exception innerException = tie.InnerException;
// 现在可以处理实际抛出的异常
// 可以打印日志、进行特殊处理等
Console.WriteLine("内部异常信息:" + innerException.Message);
}
```
在上面的代码块中,我们通过 `TargetInvocationException` 的 `InnerException` 属性获取到了实际的异常信息。之后,你可以根据需要对 `innerException` 进行处理,如记录日志、提示用户或者进行一些自定义的错误处理。
阅读全文