VS2017调试无法查看静态方法中声明的常量值问题
调试时无法查看方法内const常量值的原因
这不是Visual Studio的Bug,而是C#编译器的常量折叠特性导致的正常现象:
const声明的是编译时常量,编译器在编译阶段会将所有对该常量的引用直接替换为对应的字面量值。- 以你的代码为例,
Main方法内的LocalEps在编译后会被完全替换成0.01,最终生成的IL代码中不会保留LocalEps这个符号,调试器找不到对应的符号信息,自然无法在监视窗口或悬停时显示它的值。 - 类级别的
GlobalEps能被正常查看,是因为它属于类的成员常量,编译器会在程序集元数据中保留它的符号定义,调试器可以通过类的元数据定位到它。
解决办法
如果需要在调试时查看该常量的值,可以将const替换为方法内的readonly变量(C# 7.2及以上版本支持):
static void Main(string[] args) { readonly double LocalEps = 0.01; var result2 = 0.001 < LocalEps; var result3 = 0.011 < LocalEps; }
readonly变量属于运行时常量,编译器不会进行常量折叠,调试器能正常识别并显示它的值。
内容的提问来源于stack exchange,提问作者zhigarartem
相关产品推荐
相关产品推荐

