为什么Visual Studio调试器显示int的长十六进制值?

Ayb*_*ybe 2 c# debugging integer long-integer visual-studio-2013

调试时我遇到了这个有趣的行为:

十六进制值字符串的a长度是其他值的两倍.

在此输入图像描述

你能说出为什么会这样吗?

Han*_*ant 5

您要求调试器为您评估表达式.它现在就像编译器一样,将您输入的监视表达式转换为代码并运行该代码以显示结果.它认为这0xff000000long类型的文字,这是一个公平的调用,因为int不能存储该值,它大于Int32.MaxValue.因此,它使用参数计算>>运算符,首先将i值转换为long.结果当然也很长.

由于您没有像在代码中那样强制转换为更小的类型,因此调试器将结果(当切换为十六进制输出时)显示为64位,16位十六进制数字的long.

其他表达式不是这样的,它们中使用的文字小于Int32.MaxValue,因此使用int参数计算,产生32位结果,8个十六进制数字.

值得注意的是,调试器的表达式求值程序是接近的,但与C#编译器的求值程序不完全相同.这里不是问题,但在某些情况下它可能很重要.这可能会在Roslyn项目最终发布的某一天发生变化.