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

c# – 十进制三元不工作

发布时间:2020-12-15 08:39:56 所属栏目:百科 来源:网络整理
导读:我正在尝试使用三元组来指定小数类型.它不适合我.我疯了吗? 这是我的调试的屏幕截图.在我迈步之前你可以看到一切的价值. 在我走到这里之后是价值.它甚至不是可行的选择之一(即1或2000). 是否有一些奇怪的小数限制,我不知道?当我将其分解为完整的if / else
我正在尝试使用三元组来指定小数类型.它不适合我.我疯了吗?

这是我的调试的屏幕截图.在我迈步之前你可以看到一切的价值.

在我走到这里之后是价值.它甚至不是可行的选择之一(即1或2000).

是否有一些奇怪的小数限制,我不知道?当我将其分解为完整的if / else逻辑表示时,它可以正常工作.我唯一可以猜到的是我最近安装了.NET Framework 4.5.

UPDATE

我已经清理了解决方案,并确保我按照评论中的建议运行在调试模式下编译的代码.这些似乎都没有改变任何东西.

当我注意到我的所有单元测试仍在通过时,我开始变得好奇.经过一段时间的调查后,我发现当我再踏上一次(即跳过memberItems.Add)时,价格神奇地具有正确的价值.

.Net是否会对迭代器块中的yield命令执行类似于三元运算符的延迟解析?我以前从未注意到它,但我不知道它还能是什么.我想我仍然可能会在发布模式下意外运行代码.经过三次检查后,我犯了笨拙的错误.

解决方法

无法从屏幕截图中诊断代码,所以只是一个猜测.

您不能总是完全依赖表达式告诉您的内容.第一种可能的故障模式是调试优化的代码.像价格这样的局部变量通常会被抖动优化器优化,以存储在cpu寄存器而不是堆栈中. watch表达式将显示堆栈位置值,而不是cpu寄存器值. 0是常见的结果.您对此唯一真正的防御只是调试由Debug配置构建的代码.

第二种失败模式是评估监视表达式的方式. CLR在检测到连接的调试器时启动专用线程.然后,调试器可以使用此线程来评估监视表达式.如果变量具有任何线程关联,则可能会出错.常见情况是[ThreadStatic]变量或COM对象的属性.

(编辑:李大同)

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

    推荐文章
      热点阅读