Beh*_*zad 12 .net vb.net nullable visual-studio
我在vb.net中有一个可以为null的整数属性.
代码中的此属性具有正确的值,但在QuickWatch始终显示中1,除非我将其初始化为值,否则显示六个洋地黄数字.
我的代码是:
Public Property MyNumber As Integer?
MyNumber = 6546
MessageBox.Show(MyNumber.ToString())
Run Code Online (Sandbox Code Playgroud)

而对于可空双重属性中QuickWatch始终显示4/94065645841247E-324.

我在测试这个.Net 4 & 4.5上visual studio 2010 & 2013,并得到同样的结果.但是C#没有这个问题
编辑:
我也附加了我的项目结果,正如你在监视窗口中看到的那样,它们都会显示出来

为什么会这样?
编辑:
这个问题与.Net 4和4.5和4.5.1有关.使用.Net 2.0和3.5没有问题
确认,这确实是调试器中的一个错误.我搜索connect.microsoft.com并找不到任何类似的东西,这不是一个攻击许多VB.NET程序员的错误.并不奇怪,当你将.ToString()附加到可以为null的变量名时,这只会出错.没有人这样做过.
这不是您可以在此站点获得任何帮助的错误,这是Microsoft需要修复的错误.
稍微描述一下这个bug,这在调试器内置的VB.NET特定表达式解析器中出现了问题.你无法在C#项目中重现这一点的原因.为什么进程的位数无关紧要,64位调试器也会显示错误的值.这通常是微软一直致力于退休的变幻无常的代码.基本问题是他们必须在调试器中构建VB.NET编译器的等价物,以便可以解析这些表达式.虽然有限,但解析器几乎不支持整个语言.副作用是调试器运行的代码可能与程序运行的代码不同.
Nullable(Of T).ToString()的代码生成相当棘手,需要条件装箱转换.解析器会为任何这样的表达式弄乱它,注意如何MyNumber.GetHashCode()产生错误的值.并且MyNumber.Equals(5456.0).需要拳击转换的那种表达式.
您可以在connect.microsoft.com上技术上报告此错误,但我不建议花时间.如上所述,微软一直致力于彻底解决这个解析器问题.由Roslyn提供支持,这是一种可在任何地方使用的编译服务.它被集成到VS2015中,并且据了解,调试器也使用它.不是100%肯定,我知道在VS2015发布的9天内.也许安装了beta/RC版本的人可以通过评论确认.
更新:确认已在VS2015上修复.
同时,在您可以更新之前,解决方法是在快速/监视表达式中停止对可空变量使用ToString().它是马车.
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |