从反射抛出的TargetInvocationException可以有一个空的InnerException吗?

本文关键字:有一个 InnerException 反射 TargetInvocationException | 更新日期: 2023-09-27 18:06:49

在这里浏览System.ComponentModel.DataAnnotations.CustomValidationAttribute的源代码时,我看到了以下代码(缩短):

try
{
    methodInfo.Invoke(null, methodParams);
}
catch (TargetInvocationException ex)
{
    if (ex.InnerException != null)
    {
        throw ex.InnerException
    }
    throw;
}

这里,代码检查ex.InnerException是否为空。我不认为一个TargetInvocationException可以有一个null InnerException,如果它是从反射调用抛出的。

这可能吗?如果是,请提供一个InnerException可以为空的场景。

从反射抛出的TargetInvocationException可以有一个空的InnerException吗?

MSDN声明

创建时,TargetInvocationException被传递给通过反射调用的方法所抛出的异常的引用。InnerException属性保存底层异常。

所以理论上只使用框架反射方法,它不应该是null…从理论上讲:P

当然,如果您显式地从正在调用的方法中抛出它,它可以(并且将会)为null。