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

标签 .net reflection

我问这个问题是出于好奇,而不是真正需要知道,但我想不出 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/

相关文章:

java - 通过反射传递 List<Integer>

.net - 对于提供线程安全添加、删除、迭代集合到各种对象的包装器来说,最好的名称是什么?

c# - 从 BindingExpression 获取源属性类型

java - 以一种安全的方式调用 API 方法,以防止 JAVA 中库版本之间的更改

python - 使用 setattr 添加的属性未显示在 help() 中

.net - 有人创建了一个开源动态 .NET 类来公开另一个类上的私有(private)函数/属性吗?

.net - 如何在绝对位置插入 iTextSharp.text.Rectangle 矩形?

javascript - .NET 中的 http 链接解码

c# - 在字符串中搜索字符串(搜索 HTML 源中的所有 href)

c# - XML 文件交易