纯属好奇
我的代码有这个问题。
e
被评估为 false
,(我知道通过查看数据库中的数据它会变得错误)但是 if 语句不关心这一点,并且假设这是真的,并试图抛出异常。
有什么想法吗?
编辑:
没有;在第 16 行的末尾。
值
false
是正确的,我已经检查了数据库并且是 正确的是false
,这是预期的- 没想到的是得到了异常
- 是的,
{}
工作正常。但我想知道为什么不是这样 工作。 - 是的,清理、构建、重建,一切,并保持一致
- 不,我不在调试时更改代码。我的解决方案是在
x64
下,我无法进行更改
最佳答案
我最近在 SO 上看到一个非常相似的问题,但我找不到它。在我离开的时候,以下是我从中记住的内容,希望它能帮助您放松心情:
症状是:
- 通过调试器单步执行代码时停在不应执行的行上
- 当在调试器之外运行时,这行代码实际上没有执行
- 在有问题的代码行周围添加大括号可以解决问题。
原因与启用调试的版本中发出的额外操作码有关,以支持逐步调试。为此类版本发出的实际 IL 代码包括额外的“无操作”IL 命令,这些命令除了存在之外什么都不做,并且在单步执行代码以在“真实”操作运行之前和/或之后中断执行时使用。
在这种情况下,IDE 只是根据它试图单步执行的 IL 代码搞不清哪一行代码是“当前”代码。额外的操作代码在那里,它应该在那里,但调试器 IDE 错误地将它与前一行代码相关联。黄色突出显示位置错误。
我不记得发生这种情况的确切条件(原来问题的答案实际上是深入 IL 来解释的,希望其他人能找到那个问题!)。添加大括号会导致编译器发出空操作代码来专门表示大括号,这就是问题消失的原因。
关于c# - 在 If 语句中评估 Bool 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864691/