加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么’dynamic’ExpandoObject会引发RuntimeBinderExcep

发布时间:2020-12-15 17:35:56 所属栏目:百科 来源:网络整理
导读:使用以下示例代码:(VS 2013,更新3) dynamic demo = new ExpandoObject();demo.Test = 10;var j = demo.Test; // throws exception 当调试此代码和“异常时断开:”在VS中检查“Thrown”,然后尝试访问现有属性“Test”将抛出一个RuntimeBinderException: Sy
使用以下示例代码:(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关闭/启动会话之间不会持续.最后我发现为什么…

解决方法

为什么在VS选项中禁用启用我的代码?

现在,您将在“例外”对话框中获得一个额外的选项,只会破坏您在代码中未处理的异常:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读