Jas*_*yne 25 c# reflection exception propertyinfo targetinvocationexception
我有一些代码使用反射来从对象中提取属性值.在某些情况下,属性可能会抛出异常,因为它们具有空引用等.
object result;
try
{
result = propertyInfo.GetValue(target, null);
}
catch (TargetInvocationException ex)
{
result = ex.InnerException.Message;
}
catch (Exception ex)
{
result = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)
最终代码正常工作,但是当我在调试器下运行时:
当属性抛出异常时,IDE将进入调试器,就好像异常未被捕获一样.如果我刚刚运行,程序就会流出,异常作为TargetInvocationException出现,并在InnerException属性中有真正的异常.
我怎么能阻止这种情况发生?
Kir*_*kov 30
这似乎是"按设计".会发生什么情况,您可能有菜单工具 → 选项 → 调试 → 常规 → 启用仅启用我的代码.
至于如何:对用户未处理的异常中断状态:
在调试 → 例外对话框中显示的附加列(休息的时候例外是用户未处理)当"启用仅我的代码"是.
从本质上讲,这意味着每当异常离开代码的边界时(在这种情况下,它会落到.NET框架反射代码中),Visual Studio会中断,因为它认为异常已经离开了用户代码.它不知道它将在稍后的堆栈中返回到用户代码.
因此,有两种解决方法:在菜单" 工具" →" 选项" →" 调试" →" 常规"中禁用" 仅我的代码",或者从菜单" 调试" →" 例外"对话框中的"用户未处理的.NET Framework异常"中删除复选框.
| 归档时间: |
|
| 查看次数: |
20939 次 |
| 最近记录: |