4

只为好奇

我的代码有这个问题。

在此处输入图像描述

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

任何想法为什么?

编辑:

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

  • 该值false是正确的,我已经检查了数据库并且正在获取是正确的false,这是预期的

  • 出乎意料的是得到异常
  • 是的,{}工作正常。但我想知道为什么以这种方式不起作用。
  • 是的,清洁、建造、重建,一切都一样
  • 不,我在调试时不会更改代码。我的解决方案在下面x64,我无法进行更改
4

2 回答 2

5

我最近在 SO 上看到了一个非常相似的问题,但我找不到它。当我不在寻找时,以下是我从中记住的内容,以防万一它有助于您放松心情:

症状是:

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

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

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

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

于 2013-05-31T20:02:25.743 回答
0

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

于 2013-05-31T19:57:36.417 回答