gpt4 book ai didi

vb.net - IF() 函数和可为空整数的结果错误?

转载 作者:行者123 更新时间:2023-12-03 00:37:43 25 4
gpt4 key购买 nike

我希望以下 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 什么都没有

最佳答案

VB 中的

Nothing 可以应用于值类型和引用类型,并且在所有情况下都意味着“此类型的默认值”。因此,例如:

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)

关于vb.net - IF() 函数和可为空整数的结果错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com