我在使用在 VB.NET 中返回 Nothing 的结构和函数时有些头疼。
让我试着用这段代码在这里解释一下:
Public Class Form1
Structure Test
Dim field1 As String
End Structure
Private Function Foo() As Test
Return Nothing
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim st As Test = Foo()
End Sub
End Class
在前面的代码中,当我返回 Nothing 作为 Foo 函数的结果时,我希望st是Nothing。但这不是发生的事情。
然后我在 MSDN 文档中找到:
将 Nothing 分配给变量会将其设置为其声明类型的默认值。如果该类型包含变量成员,则它们都设置为其默认值。
所以我发现当我将Nothing分配给一个结构时,它的所有成员都设置为它们的默认值,而不是结构本身。
另外,我试图通过声明使st成为 Nullable 类型:
Dim st As Nullable(Of Test) = Foo()
但是,我仍然无法通过以下方式检查st是否为 Nothing:
If st Is Nothing Then
或者
If st.Equals(Nothing) Then
所以,问题:
1 - 是否可以将Nothing分配给结构而不是其成员?
2 - 如何检查返回结构值是否为Nothing?