在If语句中评估了Bool错误

时间:2013-05-31 19:40:28

标签: c# .net visual-studio-2010 if-statement boolean

只是为了好奇

我的代码存在这个问题。

enter image description here

e被评估为false,(我知道通过查看数据库中的数据会导致错误),但if语句并不关心它,并假设为真,并试图抛出异常。

任何想法为什么?

修改

  • 没有;在第16行的末尾。

  • false是正确的,我检查了数据库并且是 正确的是false,这是预期的

  • 不期望的是获得例外
  • 是的,{}工作正常。但我想知道为什么不这样做 工作
  • 是的,清理,构建,重建,一切,并获得相同的
  • 不,我在调试时不会更改代码。我的解决方案在x64下,我无法进行更改

2 个答案:

答案 0 :(得分:5)

我最近在SO上看到了一个非常相似的问题,但我找不到它。在我不在的时候,这是我记得的,以防它有助于缓解你的想法:

症状是:

  • 通过调试器单步执行代码停止在不应执行的行上
  • 在调试器外部运行时,代码行未实际执行
  • 在有问题的代码行周围添加花括号可以解决问题。

原因与启用Debug的版本中发出的额外操作码有关,以支持逐步调试。为此类版本发出的实际IL代码包括额外的“无操作”IL命令,除了存在之外什么都不做,并且在执行“实际”操作之前和/或之后单步执行代码以中断执行时使用。

在这种情况下,IDE只是对基于它试图逐步完成的IL代码的“当前”代码行感到困惑。应该有额外的操作代码,但是调试器IDE错误地将它与前一行代码相关联。黄色突出显示在错误的位置。

我不记得导致这种情况发生的确切条件(原始问题的答案实际上已经挖到IL来解释它,希望其他人可以找到这个问题!)。添加大括号会导致编译器专门发出无操作代码来表示大括号,这就是问题消失的原因。

答案 1 :(得分:0)

偶然 - 是否有另一个变量在某个地方定义了名为'e'的不同范围,导致编译器对使用哪个值感到困惑?尝试将“e”更改为其他名称。