使用以下示例代码:(VS 2013,更新3)
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关闭/启动会话之间不会持续.最后我发现为什么…