1

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

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

在这里,代码检查是否ex.InnerException为空。我认为如果从反射调用中抛出 a ,它TargetInvocationException永远不会有 a 。null InnerException

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

4

1 回答 1

1

MSDN指出_

创建时,TargetInvocationException 被传递给通过反射调用的方法引发的异常的引用。InnerException 属性包含基础异常。

所以理论上只使用框架反射方法它不应该是空的......理论上:P

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

于 2016-09-12T11:57:48.343 回答