VB.net中的If()函数之谜

VB.net中的If()函数之谜,第1张

概述我有这个代码: dstCell.CELL_VALUE_INT = If(srcCell.CELL_VALUE_FLOAT IsNot Nothing, Math.Round(CDbl(srcCell.CELL_VALUE_FLOAT)), Nothing) 当srcCell.CELL_V 我有这个代码:

dstCell.CELL_VALUE_INT = If(srcCell.CELL_VALUE_float IsNot nothing,Math.Round(CDbl(srcCell.CELL_VALUE_float)),nothing)

当srcCell.CELL_VALUE_float为nothing时,它会神秘地评估True部分!

有趣的是,正常的If语句正确评估为False部分:

If (srcCell.CELL_VALUE_float IsNot nothing) Then    dstCell.CELL_VALUE_INT = Math.Round(CDbl(srcCell.CELL_VALUE_float))Else    dstCell.CELL_VALUE_INT = nothingEnd If

有任何想法吗?

感谢你!

编辑:
CELL_VALUE_float是Nullable(Of Double),CELL_VALUE_INT是Nullable(整数)

在Quickwatch中,条件将correclty评估为False,但在运行时,If()函数的计算结果为True部分.

解决方法 VB.NET中的任何内容都不完全等于C#中的null
它更像默认值(T),其中T是Type.

' VB:dim x as DateTime = DateTime.MinValueIf x Is nothing then    Console.Writeline("True")End if' C#var x = DateTime.MinValueif (x == default(DateTime))    Console.Writeline("True");if (x == null) ' throw a compile time error

dim x as Double = nothing ' x will be 0 (default for Double)

如果希望两个返回值都是相同的类型,则内联构建.所以你真正做的是:

dstCell.CELL_VALUE_INT = If(srcCell.CELL_VALUE_float IsNot nothing,Convert.Todouble(nothing))

因为false部分内部转换为double
和dstCell.CELL_VALUE_INT将为0而不是任何内容.

试试这个:

dstCell.CELL_VALUE_INT = If(srcCell.CELL_VALUE_float IsNot nothing,Ctype(Math.Round(CDbl(srcCell.CELL_VALUE_float)),Integer?),nothing)
总结

以上是内存溢出为你收集整理的VB.net中的If()函数之谜全部内容,希望文章能够帮你解决VB.net中的If()函数之谜所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存