我在 Visual Studio 2010 调试器中遇到了似乎是错误的问题。我有一段简单的代码,其中bool
初始化为的变量true
与计算结果为的表达式进行与分配false
。它的最终结果显然应该是false
,但调试器有时会将其显示为true
。
static void Main(string[] args)
{
int x = 20;
int y = 0;
int z = 8;
bool b = true;
b &= x == y || x >= z && y >= z;
}
该问题并非始终如一地发生;例如,如果我int
在 AND 赋值中将变量替换为它们的实际值,则b
正确显示为false
. 如果我稍后引用该变量(例如Console.WriteLine(b)
),问题也不会出现。
我知道上面的整个代码片段有资格被编译器消除死代码,但我认为在调试模式下编译并在附加调试器的情况下运行时不允许这样的自由?
我正在使用带有 SP1 的 Visual Studio 2010 Professional,目标是 .NET Framework 4.0(尽管我安装了 4.5),在“任何 CPU”的调试模式下构建(使用 64 位平台)。