.net – QuickWatch无法正常显示Nullable属性的“.ToString()”

我在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().这是错车.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...