gpt4 book ai didi

.net - 为什么 MethodInfo.Invoke 将异常包装在 TargetInitationException 中?

转载 作者:行者123 更新时间:2023-12-02 23:13:26 30 4
gpt4 key购买 nike

我问这个问题是出于好奇,而不是真正需要知道,但我想不出 MethodInfo.Invoke 包装其异常的任何充分理由。

如果让它们以未包装的方式传递,那么在 Visual Studio 中调试此类异常会稍微容易一些 - 我不必要求 VS 在第一次出现异常时停止以查看异常源处的当前状态。堆栈跟踪可能会在调用 Invoke 之后显示 [外部代码],但那又如何。

我是否缺少此包装提供的一些重要功能,如果 Invoke 让异常以未包装的方式传递,这些功能是不可能实现的?

最佳答案

Am I missing some important function that this wrapping provides that would not be possible had Invoke let exceptions pass unwrapped?

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

另一个参数是调用方法本身的契约。在 Java 中,invoke 方法只允许抛出方法签名中声明的异常。任意异常将根本不遵守签名,然后需要被包装。这个论点对于 C# 来说并不成立,但仍然有效。 invoke 方法在文档中定义了一个约定,如果按原样抛出目标异常,则您不能依赖该约定。

关于.net - 为什么 MethodInfo.Invoke 将异常包装在 TargetInitationException 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com