当前位置:  开发笔记 > 后端 > 正文

IF()函数和可以为空的整数错误的结果?

如何解决《IF()函数和可以为空的整数错误的结果?》经验,为你挑选了1个好方法。

我希望以下vb.net函数返回一个值Nothing,但它返回一个值为0...

Public Shared Function GetDefaultTipoSrvTkt() As Integer?
    Dim tsrvDict As New Dictionary(Of Integer, DataRow) 
    GetDefaultTipoSrvTkt = If(IsNothing(tsrvDict) OrElse tsrvDict.Count = 0, Nothing, tsrvDict.First.Key)
End Function

该函数的最后一行也可以写成Return If(IsNothing(tsrvDict) OrElse tsrvDict.Count = 0, Nothing, tsrvDict.First.Key)但无论如何,为什么IF()函数If(IsNothing(tsrvDict) OrElse tsrvDict.Count = 0, Nothing, tsrvDict.First.Key)返回0而不是Nothing



1> Pavel Minaev..:

Nothing在VB中可以应用于值类型以及引用类型,并且在所有情况下都表示"此类型的默认值".所以,例如:

Dim x As Integer = Nothing
Console.WriteLine(x) ' 0

对于If()运算符,VB必须以某种方式推导出返回类型.它查看两个分支,并找出它们最近的常见类型.在这种情况下,一个分支是类型的Integer.另一个是Nothing"无类型",但它与Integer我们之前看到的兼容.因此,If()推断出结果类型Integer.如果Nothing在这种情况下返回,就变成0.

显式演员将解决此问题:

GetDefaultTipoSrvTkt = If( _
    IsNothing(tsrvDict) OrElse tsrvDict.Count = 0, _
    CType(Nothing, Integer?), _
    tsrvDict.First.Key)

或者您可以使用另一种方法为可空类型指定空值:

GetDefaultTipoSrvTkt = If( _
    IsNothing(tsrvDict) OrElse tsrvDict.Count = 0, _
    New Integer?(), _ 
    tsrvDict.First.Key)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有