Значение Nothing и Nullable-типы

Последнее обновление: 30.10.2015

Все значимые типы, как например, Byte или Integer, должны иметь определенное значение. В отличие от значимых типов объекты ссылочных типов могут принимать значение Nothing или неопределенное значение. Например, Dim d As Object = Nothing. Объекты же типов значений так задать нельзя, и если мы напишем что-то наподобие Dim x As Integer = Nothing, то число x все равно будет определено - оно будет иметь значение по умолчанию, то есть 0.

Но иногда бывает удобно, чтобы объекты числовых типов в определенных ситуациях имели неопределенное значение, то есть Nothing. Например, при получении данных из базы данных мы точно не можем знать, установлены ли в бд данные или они имеют какое-то значение.

Чтобы задать объектам значимых типов неопределенное значение, надо использовать знак вопроса ? после указания типа. Например:

Dim d As Integer? = Nothing
Dim alive As Boolean? = Nothing

Но в действительности запись ? является упрощенной формой использования структуры Nullable(Of T). Параметр T в угловых скобках представляет универсальный параметр, вместо которого в приложении подставляется конкретный тип данных. Следующие виды определения переменных будут эквивалентны:

Dim z1 As Integer? = 5
Dim enabled1 As Boolean? = Nothing
Dim s1 As Double = 3.3

Dim z2 As Nullable(Of Integer) = 5
Dim enabled2 As Nullable(Of Boolean) = Nothing
Dim s2 As Nullable(Of Double) = 3.3

Иногда перед присвоением одной переменной Nullable(Of T) другой обычной переменной требуется узнать, а имеет ли она определенное значение. Или ее значение равно Nothing, то присвоить обычной переменной некоторое значение по умолчанию. Это мы можем сделать следующим способом:

Dim x As Integer? = Nothing
Dim y As Integer = If(x, 100) ' Равно 100, так как x равен Nothing

Dim z As Integer? = 20
Dim t As Integer = If(z, 100) ' Равно 20, так как z не равно Nothing

Оператор If принимает два аргумента - если первый не равен Nothing, то возвращается он, иначе возвращается второй аргумент.

Но мы не можем написать следующим образом:

Dim z As Integer = 20
Dim t As Integer = If(z, 100)

Здесь переменная z не может использоваться в качестве первого параметра, так как она не представляет тип Nullable(Of T) и не может принимать значение Nothing.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850