gpt4 book ai didi

vb.net - HasValue 给出值 0 而不是 Nothing

转载 作者:行者123 更新时间:2023-12-01 10:21:55 28 4
gpt4 key购买 nike

问题很简单,当我将 Nothing 的 CustomClass 传递到 Query 方法 second.HasValue 最后的 Run 方法时 显示 0。不应该是 Nothing 吗?

Public Function Run() As Boolean
Return Query(if(CustomClass IsNot Nothing, CustomClass.Id, Nothing))
End Function

Public Function Query(second As Integer?) As Boolean
...
If second.HasValue Then
'value = 0 !
Else
'some query
End If

...
End Function

最佳答案

这是一个 VB.NET 的奇怪之处。 Nothing不仅仅意味着null(C#)还有default(C#) .因此它将返回给定类型的默认值。出于这个原因,您甚至可以将 Nothing 分配给 Integer 变量(或任何其他引用或值类型)。

在这种情况下,编译器决定 Nothing 表示 Integer 的默认值是 0。为什么?因为他需要找一个implicit conversionId-property,即 Int32

如果你想要一个 Nullable(Of Int32) 使用:

Return Query(if(CustomClass IsNot Nothing, CustomClass.Id, New Int32?()))

因为我提到了 C#,如果你在那里尝试同样的操作,你会得到一个编译器错误,即 nullint 之间没有隐式转换。在VB.NET中有一个,默认值为0。

关于vb.net - HasValue 给出值 0 而不是 Nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50387614/

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