c# - 在 If 语句中评估 Bool 错误

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

纯属好奇

我的代码有这个问题。

enter image description here

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

有什么想法吗?

编辑:

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

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

  • 没想到的是得到了异常
  • 是的,{} 工作正常。但我想知道为什么不是这样 工作。
  • 是的,清理、构建、重建,一切,并保持一致
  • 不,我不在调试时更改代码。我的解决方案是在 x64 下,我无法进行更改

最佳答案

我最近在 SO 上看到一个非常相似的问题,但我找不到它。在我离开的时候,以下是我从中记住的内容,希望它能帮助您放松心情:

症状是:

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

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

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

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

关于c# - 在 If 语句中评估 Bool 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864691/

相关文章:

c# - 尝试分配给 C# 'foreach iteration variable' 会生成编译时错误。在 Linq [IEnumerable].ForEach(...) 中这样做不会。为什么?

c# - 如何在 C# 中使用 HttpClient GetAsync 方法传递请求内容

c# - 工具提示出现在表单/窗口后面! (C#/VS 2008)

visual-studio-2010 - IIS7 和 Visual Studio 2010 中的 HttpHandler

visual-studio-2010 - Visual Studio 2010 Ultimate 中的 Pex 和 F#

c# - 使用 Flash 客户端和 .NET 服务器端的 Facebook 多人 Canvas 游戏

c# - 延迟按键操作中的搜索功能

asp.net - 有条件的 ASP.NET 中继器

.net - 最新版本的 WinForms 是什么?这与 .NET 的版本有什么关系?

visual-studio-2010 - 在 Visual Studio 2010 中调试时无限循环