gpt4 book ai didi

c# - 十进制三进制不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:35:07 26 4
gpt4 key购买 nike

我正在尝试使用三进制来分配十进制类型。这对我不起作用。我要疯了吗?

这是我调试的屏幕截图。在我迈出第一步之前,你可以看到一切的值(value)。 enter image description here

在我走到这里之后就是值(value)。它甚至不是可行的选项之一(即 1 或 2000)。 enter image description here

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

更新

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

当我注意到我所有的单元测试仍然通过时,我开始感到好奇。经过更多的调查后,我发现当我再踩一次(即踩过 memberItems.Add)时,价格神奇地具有正确的值(value)。

.Net 是否对三元运算符进行某种延迟解析,类似于迭代器 block 中的 yield 命令?我以前从未注意到它,但我不知道它还能是什么。我想我也可能仍然意外地在以 Release模式编译的代码上运行。在对自己进行三重检查后,我犯了更愚蠢的错误。

最佳答案

无法从屏幕截图诊断代码,所以只能猜测。

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

第二种失败模式是监视表达式的求值方式。当 CLR 检测到附加的调试器时,它会启动一个专用线程。然后,调试器可以使用该线程来计算监视表达式。如果变量具有任何线程亲和性,这可能会出错。常见情况是 [ThreadStatic] 变量或 COM 对象的属性。

关于c# - 十进制三进制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com