У меня есть некоторые головные боли при использовании структур и функций, которые ничего не возвращают в VB.NET.
Позвольте мне попытаться объяснить здесь этот код:
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 Ничем, используя:
If st Is Nothing Then
или
If st.Equals(Nothing) Then
Итак, вопросы:
1 - Можно ли присвоить Nothing структуре, а не ее элементам?
2 - Как проверить, имеет ли возвращаемое значение структуры Nothing ?