dynamic demo = new ExpandoObject(); demo.Test = 10; var j = demo.Test; // throws exception
当调试此代码和“异常时断开:”在VS中检查“Thrown”,然后尝试访问现有属性“Test”将抛出一个RuntimeBinderException:
System.Dynamic.ExpandoObject’ does not contain a definition for ‘Test’
注意:步骤到下一行,变量j被正确设置为10.
Q1:为什么抛出异常,当Test属性明确存在并保存由事实变量j证明的值10成功设置此值时?当我尝试使用一个非常现有的属性名称(如Test2)时,完全相同的异常发生,区别在于代码真的跳出了一个非处理异常的块…
抛出一个完全错误和误导的异常,然后在内部处理它是没有意义的,除了它使VS’Break当一个例外是:’Thrown’选项功能几乎不能用于代码什么使用动态对象.
Q2:是的,我知道这个问题可以通过取消选中“异常时断开:”抛出“选项来隐藏.
然而,假设开发人员使用动态对象,并尝试在她/他的代码中找到与动态对象完全无关的异常,这不是一个选项,这个问题使得“异常时断开:”抛出“选项不可用,因为那么调试器将停止数千个正确的属性访问语句.有解决办法吗?
错过了我的东西?
提前致谢.
*编辑*
这个编辑是在正确的答案之后.
Damir在回答中问道:“为什么在VS选项中禁用启用我的代码?”那么这里是答案…我被bug了几天,并经历过,尽管我明确地检查“我的代码”选项,它以某种方式在VS关闭/启动会话之间不会持续.最后我发现为什么…
解决方法
现在,您将在“例外”对话框中获得一个额外的选项,只会破坏您在代码中未处理的异常:
如果您像这样配置VS,那么当抛出这些内部处理的异常时,调试器不会再破坏.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。