@H_
502_0@
我在vb.net中有一个可空的整数
属性.
代码中的此
属性具有正确的值,但在QuickWatch中始终
显示1,除非我通过值初始化,然后
显示六个洋地黄数字.
我的代码是:
Public Property MyNumber As Integer?
MyNumber = 6546
MessageBox.Show(MyNumber.ToString())
而QuickWatch中的可空双属性始终显示4 / 94065645841247E-324.
我在.net 4& 4.5 on visual studio 2010& 2013并获得相同的结果.但是C#没有这个问题
编辑:
我附加了我的项目结果,正如你在看窗口中看到的,它们都显示出来
为什么会发生这种情况?
编辑:
这个问题是.Net 4和4.5和4.5.1. .Net 2.0和3.5没有问题
确认,这确实是调试器中的一个
错误.我
搜索到connect.microsoft.com,找不到任何类似的东西,这不是一个bug,许多VB.NET程序员.不完全令人惊讶,只有在将.ToString()附加到可空变量名时才会出错.没有人这样做
它不是那种可以在这个网站获得任何帮助的bug,它是Microsoft需要修复的错误.
在这个bug的一个特征中,这似乎在调试器内置的VB.NET特定表达式解析器中出错了.你不能在C#项目中重申这个原因.为什么进程的位置无关紧要,64位调试器也显示错误的值.这通常是微软一直在努力退休的虚拟代码.基本的问题是,他们必须将VB.NET编译器的等价物构建到调试器中,以便可以解析这些表达式.尽管如此,该解析器几乎不支持整个语言.副作用是调试器运行的代码可能与程序运行的代码不同.
Nullable(Of T).ToString()的代码相当棘手,它需要一个条件性的拳击转换.解析器将它用于任何这样的表达式,注意MyNumber.GetHashCode()如何产生错误的值.和MyNumber.Equals(5456.0).这种表达式需要拳击转换.
你可以在connect.microsoft.com技术上报告这个错误,但我不会建议花时间.如前所述,微软一直在努力退休这个解析器,最终发生了.由Roslyn提供,可在任何地方使用编译服务.它被集成到VS2015中,并且尽可能了解调试器也使用它.不是100%肯定,我会在9天内知道VS2015发布.也许有安装beta / RC版本的人可以通过评论来确认.
更新:确认固定在VS2015上.
同时,直到你可以更新,解决方法是停止对快速/观察表达式中的可变变量使用ToString().这是错车.