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
前のコードで、 Foo 関数の結果として Nothing を返す場合、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かどうかを確認するにはどうすればよいですか?