代码之家  ›  专栏  ›  技术社区  ›  Roman Starkov

为什么MethodInfo.Invoke在TargetInvocationException中包装异常?

  •  8
  • Roman Starkov  · 技术社区  · 16 年前

    我这么问是出于好奇,而不是出于真正的需要,但我想不出任何好的理由 MethodInfo.Invoke 包装它的异常。

    如果让它们通过展开,在Visual Studio中调试此类异常会简单一点-我不必要求vs在第一次出现异常时停止,以在异常源处查看当前状态。堆栈跟踪可能会在调用之后显示[外部代码] Invoke 但那又怎样。

    我是否遗漏了包装所提供的一些不可能实现的重要功能? 援引 让例外情况展开?

    2 回复  |  直到 16 年前
        1
  •  9
  •   ewernli    16 年前

    我错过了一些重要的功能吗 这个包装提供了 不可能有invoke let 例外情况是否已解除包装?

    对。一个论点是 区分目标方法引发的异常和反射机制本身引发的异常 . Ex. ArgumentException 可以从反射机制中抛出 目标方法——这是两个不同的元级别。

    另一个论点是 合同 invoke 方法本身 . 在Java中 援引 方法只允许引发方法签名中声明的异常。任意的异常只是不遵守签名,然后需要包装。此参数不适用于C,但仍然有效。这个 援引 方法在文档中定义了一个协定,如果按原样引发了目标异常,则不能依赖该协定。

        2
  •  -1
  •   Slavo    16 年前

    如果存在这样一种情况,即可以在不引发被调用方法和异常的情况下引发TargetInvocationException,那么这是有意义的。我不确定是否有这种情况。

    推荐文章