Ничего ключевое слово (Visual Basic)

Представляет значение по умолчанию любого типа данных. Для ссылочных типов значение по умолчанию является ссылкой null . Для типов значений значение по умолчанию зависит от того, допускается ли тип значения NULL.

Примечание.

Для типов значений, не допускающих значение NULL, Nothing в Visual Basic отличается от null C#. Если в Visual Basic задана переменная типа Nothingзначения, не допускающего значения NULL, переменная имеет значение по умолчанию для объявленного типа. В C# при назначении переменной типа nullзначения, не допускающего значение NULL, возникает ошибка во время компиляции.

Замечания

Nothing представляет значение по умолчанию типа данных. Значение по умолчанию зависит от того, является ли переменная типом значения или ссылочным типом.

Переменная типа значения непосредственно содержит его значение. Типы значений включают все числовые типы данных, Boolean, Char, Dateвсе структуры и все перечисления. Переменная ссылочного типа сохраняет ссылку на экземпляр объекта в памяти. Ссылочные типы включают классы, массивы, делегаты и строки. Для получения дополнительной информации см. Value Types and Reference Types.

Если переменная имеет тип значения, поведение Nothing зависит от того, имеет ли переменная тип данных, допускающий значение NULL. Чтобы представить тип значения, допускающий значение NULL, добавьте ? модификатор в имя типа. При Nothing назначении переменной, допускающей значение NULL, присваивается значение null. Дополнительные сведения и примеры см. в разделе "Типы значений, допускающих значение NULL".

Если переменная имеет тип значения, который не имеет значения NULL, присвойте Nothing ему значение по умолчанию для объявленного типа. Если этот тип содержит члены переменной, они все задаются значениями по умолчанию. В следующем примере показано это для скалярных типов.

Module Module1

    Sub Main()
        Dim ts As TestStruct
        Dim i As Integer
        Dim b As Boolean

        ' The following statement sets ts.Name to null and ts.Number to 0.
        ts = Nothing

        ' The following statements set i to 0 and b to False.
        i = Nothing
        b = Nothing

        Console.WriteLine($"ts.Name: {ts.Name}")
        Console.WriteLine($"ts.Number: {ts.Number}")
        Console.WriteLine($"i: {i}")
        Console.WriteLine($"b: {b}")

        Console.ReadKey()
    End Sub

    Public Structure TestStruct
        Public Name As String
        Public Number As Integer
    End Structure
End Module

Если переменная имеет ссылочный тип, присвойте Nothing переменной ссылку null типа переменной. Переменная, заданная для null ссылки, не связана с любым объектом. Следующий пример демонстрирует это:

Module Module1

    Sub Main()

        Dim testObject As Object
        ' The following statement sets testObject so that it does not refer to
        ' any instance.
        testObject = Nothing

        Dim tc As New TestClass
        tc = Nothing
        ' The fields of tc cannot be accessed. The following statement causes 
        ' a NullReferenceException at run time. (Compare to the assignment of
        ' Nothing to structure ts in the previous example.)
        'Console.WriteLine(tc.Field1)

    End Sub

    Class TestClass
        Public Field1 As Integer
        ' . . .
    End Class
End Module

Чтобы проверка, является nullли переменная ссылки (или типа значения, допускающей значение NULL), всегда используйте Is Nothing илиIsNot Nothing. Не используйте = Nothing или <> Nothing.

Для строк в Visual Basic пустая строка равна Nothing. "" = Nothing Поэтому имеет значение true. Этот факт особенно важен для выбора правильного сравнения при работе со строками. Хотя myString = Nothing и myString <> Nothing укажите, задано ли непустое значение, настоятельно рекомендуется использовать String.IsNullOrEmpty(myString) для этой цели. Используйте Is Nothing и IsNot Nothing определите, задано ли любое значение, включая пустую строку.

В следующем примере показаны сравнения, использующие операторы и IsNot операторыIs:

Module Module1
    Sub Main()

        Dim testObject As Object
        testObject = Nothing
        Console.WriteLine(testObject Is Nothing)
        ' Output: True

        Dim tc As New TestClass
        tc = Nothing
        Console.WriteLine(tc IsNot Nothing)
        ' Output: False

        ' Declare a nullable value type.
        Dim n? As Integer
        Console.WriteLine(n Is Nothing)
        ' Output: True

        n = 4
        Console.WriteLine(n Is Nothing)
        ' Output: False

        n = Nothing
        Console.WriteLine(n IsNot Nothing)
        ' Output: False

        Console.ReadKey()
    End Sub

    Class TestClass
        Public Field1 As Integer
        Private field2 As Boolean
    End Class
End Module

Если вы объявляете переменную без использования предложения и задаете для нее As значение Nothing, переменная имеет тип Object. Примером этого является Dim something = Nothing. Ошибка во время компиляции возникает в этом случае, когда Option Strict включен и Option Infer отключен.

При назначении Nothing переменной объекта он больше не ссылается на любой экземпляр объекта. Если переменная ранее ссылалась на экземпляр, установка ее не Nothing завершает сам экземпляр. Экземпляр завершается, и ресурсы памяти и системные ресурсы, связанные с ним, освобождаются только после того, как сборщик мусора (GC) обнаруживает, что оставшиеся активные ссылки отсутствуют.

Nothing отличается от DBNull объекта, представляющего неинициализированный вариант или несуществующий столбец базы данных.

См. также