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()函数之谜所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)