g.p*_*dou 12 .net c# exception
使用以下示例代码:(VS 2013,update 3)
dynamic demo = new ExpandoObject();
demo.Test = 10;
var j = demo.Test; // throws exception
Run Code Online (Sandbox Code Playgroud)
调试此代码和'在异常时中断:'Thrown''在VS中检查然后尝试访问现有属性'Test'会抛出RuntimeBinderException:
System.Dynamic.ExpandoObject'不包含'Test'的定义
注意:转到下一行,变量j正确设置为10.


Q1:为什么抛出异常,当Test属性肯定存在并保持值10时,事实变量j成功设置了这个值?当我尝试使用一个非常不存在的属性名称(如Test2)时会发生完全相同的异常,但不同之处在于代码确实跳出了具有非处理异常的块...
抛出一个完全错误和误导性的异常,然后在内部处理它只是没有意义,除了它呈现VS'中断异常时:'Thrown'选项功能实际上不能用于使用动态对象的代码.
Q2:是的我知道这个问题可以通过取消选中 '当异常是:'Thrown'选项时中断.然而,假设开发人员使用动态对象并试图在她/他的代码中找到与动态对象完全无关的异常,这不是一个选项,这个问题使得"当异常发生时中断:'抛出'选项无法使用,因为然后调试器将停止数千个正确的属性访问语句.有没有解决方法?
错过了什么?
提前致谢.
*编辑* 此编辑在正确答案之后.
Damir在他的回答中问道:"为什么我的VS选项中禁用了Enable Just My Code?" 好吧,这就是答案......我对此进行了几天的监视,并且经历过,尽管我明确地检查了"我的代码"选项,但它在VS关闭/启动会话之间不会持续存在.最后我发现了为什么......

为什么在VS选项中禁用Enable Just My Code?

现在,您将在"例外"对话框中获得一个附加选项,以便仅对代码中未处理的异常进行分解:

如果像这样配置VS,则抛出这些内部处理的异常时,调试器不会再破坏.