c# – 十进制三元不工作

前端之家收集整理的这篇文章主要介绍了c# – 十进制三元不工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用三元组来指定小数类型.它不适合我.我疯了吗?

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

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

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

UPDATE

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

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

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

解决方法

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

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

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

猜你在找的C#相关文章