当 C# 中值为 false 时,这个 If 条件如何以及为什么满足

How and Why is this If condition satisfying when value is false in C#

我在 Windows Phone 应用程序中遇到了这个奇怪的问题。当它应该显示上一页时,点击硬件后退按钮退出应用程序。在调试的时候,我发现了一些奇怪的东西。

在这种方法中,this.FrameNot null(如第 3 针所示)但 this.Frame.CanGoBack is False(如第 1 针所示)这意味着 && (AND) 运算符应该使此条件为 false 并且确实如此(如第二个 Pin 所示)。调试器仍然进入执行条件(如您在第二个引脚下方所见)。

这真的很奇怪,这只会退出我的应用程序。

可能有两个原因:

可能: 属性 被多次读取,并且在程序中首次计算时和在调试器中观察时可以 return 不同的值。您的应用程序是否使用多线程或 属性 通常随时间变化?

不太可能: jit 编译器中的错误。尽管这极不可能,但人们以前也曾偶然发现过此类错误。

this.Frame.CanGoBack 属性 在进入和到达下一行之间发生了变化。一个 属性 实现如下:

get {
   var result=backingvalue;
   backingvalue=!result;
   return result;
}

会做的。

尝试将代码更改为以下内容:

var bool1=this.Frame!=null;
if (bool1)
{
  var bool2=this.Frame.CanGoBack;
  if (bool2)
  {
    ...
  }
}

然后设置断点并检查bool1/bool2和this.Frame.CanGoBack的值。