实例化的局部变量在调试检查器中显示为空

Arn*_*uwe 5 c# debugging visual-studio-debugging async-await

在 Visual Studio 中调试一些异步代码时遇到一个奇怪的问题: 在此处输入图片说明

正如您所看到的,我有一个 for 循环,它在其中包含 9 个实例化对象的 IEnumerable 上进行迭代(我知道可怕的命名,不是我的数据库...) i在这种情况下为 0,因此 elementAt 应该将第一项放入betaling变量中。这正确发生,并且此代码完美执行,但在调试器中显示为空:

在此处输入图片说明

当我继续调试时,一切正常,betaling变量在多行代码中使用并正确保存到数据库中,因此只有我的调试检查器将对象显示为空。然而,当您调试时,这非常令人恼火,因为您看不到任何东西..我怀疑这与异步等待有关。在此循环之前有多个 DB 等待。而betaling循环中对象的保存也是await方法。但是,当我尝试在测试项目中重现此行为时,一切正常。

我知道在异步方法中访问来自其他威胁的属性时可能会遇到问题,我正在从 VM 调用此代码,但是为什么我可以检查列表?我怀疑这是一个错误,如果不是,那肯定是一个奇怪的“功能”,能够遵循代码行但无法检查某些属性。

我在 VIsual Studio 2012 和 2013 中对此进行了测试,两者的行为相同。

erg*_*ack 1

我在 VS 2015 Update 3 和 VS 2017 上都看到了这一点。

作为解决方法,我发现使用鼠标悬停/单击“运行执行到此处”保留了实例化值,其中键盘加速器(“Ctrl+Shift+F10”)将使实例化值无效。

VS 鼠标悬停“运行执行到此处”