如果陈述表现奇怪

时间:2014-04-01 09:03:33

标签: c#

我有以下代码:

var test = _myDictionary.ContainsKey(myKey); 
if (!test) 
{ 
        Logger.Error("My log message"); 
        throw new ApplicationException("My exception message"); 
}

字典包含密钥。调试时,test的值为true

会发生什么,代码是直接跳转到throw语句,跳过对Logger的调用,而它实际上也不应该这样做 - 它应该跳过整个块并且继续执行。

我已经完全从存储库中替换了源代码,我已经多次清理和重建,但无济于事。

但是,当我将代码更改为

if (test)
{
     // my code
}
else
{
        Logger.Error("My log message"); 
        throw new ApplicationException("My exception message"); 
}

一切都按预期工作。

任何想法可能会在这里发生什么?它现在的工作原理,但我不会轻易休息,除非我知道这可能是什么原因。

更新:我删除了输出文件夹中的.suo文件和一些二进制文件,即使我清理了解决方案,也没有删除。在此之后,它似乎工作正常

1 个答案:

答案 0 :(得分:6)

当程序集及其PDB不同步时,有时会发生这种情况。当您进行调试时,调试器实际上从PDB文件中读取相关信息,而不是直接从源文件中读取。

您应该只是尝试重建项目(或手动清理然后构建),然后再试一次。

编辑我误解了你的问题,你说你已经尝试过重建了。在这种情况下,在调试期间,转到调试→Windows→模块窗口,并确保加载的符号文件实际上是正确的(例如从同一bin\Debug位置加载):