c# - 为什么 TargetInvocationException 被视为未被 IDE 捕获?

标签 c# exception reflection propertyinfo targetinvocationexception

我有一些代码使用反射从对象中提取属性值。在某些情况下,属性可能会抛出异常,因为它们具有空引用等。

object result;
try
{
    result = propertyInfo.GetValue(target, null);

}
catch (TargetInvocationException ex)
{
    result = ex.InnerException.Message;
}
catch (Exception ex)
{
    result = ex.Message;
}

最终代码可以正常工作,但是当我在调试器下运行时:

当属性抛出异常时,IDE 会进入调试器,就好像异常未被捕获一样。如果我只是点击运行,程序就会运行,异常会作为 TargetInvocationException 出现,真正的异常在 InnerException 属性中。

我怎样才能阻止这种情况发生?

最佳答案

这似乎是“设计使然”。发生的情况是您可能有菜单工具选项调试常规启用我的代码已启用。

作为 How to: Break on User-Unhandled Exceptions 指出:

调试异常 对话框在“启用仅我的代码”打开时显示一个附加列(当用户未处理异常时中断)。

这基本上意味着每当异常离开代码边界(在本例中,它落入 .NET 框架反射代码),Visual Studio 就会中断,因为它认为异常已经离开用户代码.它不知道它稍后会在堆栈中返回到用户代码中。

因此有两种解决方法:在菜单工具中禁用Just My Code选项调试 → < em>常规 从菜单调试异常中删除用户未处理的 .NET Framework 异常的复选框 对话框。

关于c# - 为什么 TargetInvocationException 被视为未被 IDE 捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658908/

相关文章:

c# - 单数/复数词的本地化 - 语法数字的不同语言规则是什么?

c# - 在 C# 中抛出保留异常时会出现什么问题?

java - 处理图像无法渲染的情况

java - Java 内存中的动态编译类以及依赖于这些类的类

c# - 如何首先获取 EF6 数据库中的 Schema.Table 名称?

c# - SkiaSharp Tiff 支持

android - 如何更改异常消息, "The application ... has stopped unexpectedly. Please try again later.”

java - 使用java反射api访问私有(private)对象

reflection - XNA 碰撞检测 - Vector2.Reflect - 帮助计算圆形 Sprite 的法线 - C#

c# - 为什么在 "Windows Class Library"项目中创建时未发现 wcf 服务?