gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:21:47 25 4
gpt4 key购买 nike

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

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/

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