Nothing キーワード (Visual Basic)Nothing keyword (Visual Basic)

任意のデータ型の既定値を表します。Represents the default value of any data type. 参照型の場合、既定値は null 参照です。For reference types, the default value is the null reference. 値型の場合、既定値は、値型が null 値を許容するかどうかによって異なります。For value types, the default value depends on whether the value type is nullable.

注意

Null 非許容値型の場合、Visual Basic の Nothing はのC#null と異なります。For non-nullable value types, Nothing in Visual Basic differs from null in C#. Visual Basic で、null 非許容の値型の変数を Nothingに設定すると、変数は宣言された型の既定値に設定されます。In Visual Basic, if you set a variable of a non-nullable value type to Nothing, the variable is set to the default value for its declared type. でC#は、null 非許容の値型の変数を nullに割り当てると、コンパイル時エラーが発生します。In C#, if you assign a variable of a non-nullable value type to null, a compile-time error occurs.

コメントRemarks

Nothing は、データ型の既定値を表します。Nothing represents the default value of a data type. 既定値は、変数が値型であるか、参照型であるかによって異なります。The default value depends on whether the variable is of a value type or of a reference type.

値型の変数には、その値が直接含まれています。A variable of a value type directly contains its value. 値型には、すべての数値データ型、BooleanCharDate、すべての構造体、すべての列挙が含まれます。Value types include all numeric data types, Boolean, Char, Date, all structures, and all enumerations. 参照型の変数は、メモリ内のオブジェクトのインスタンスへの参照を格納します。A variable of a reference type stores a reference to an instance of the object in memory. 参照型には、クラス、配列、デリゲート、および文字列が含まれます。Reference types include classes, arrays, delegates, and strings. 詳細については、「 Value Types and Reference Types」を参照してください。For more information, see Value Types and Reference Types.

変数が値型の場合、Nothing の動作は、変数が null 許容型かどうかによって異なります。If a variable is of a value type, the behavior of Nothing depends on whether the variable is of a nullable data type. Null 許容値型を表すには、型名に ? 修飾子を追加します。To represent a nullable value type, add a ? modifier to the type name. Nothing を null 許容変数に割り当てると、値が nullに設定されます。Assigning Nothing to a nullable variable sets the value to null. 詳細と例については、「 Null 許容値型」を参照してください。For more information and examples, see Nullable Value Types.

変数が null 値が許容されない値型である場合、その変数に Nothing を割り当てると、宣言された型の既定値に設定されます。If a variable is of a value type that is not nullable, assigning Nothing to it sets it to the default value for its declared type. その型に変数メンバーが含まれている場合は、すべてが既定値に設定されます。If that type contains variable members, they are all set to their default values. 次の例では、スカラー型について説明します。The following example illustrates this for scalar types.

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 参照に設定されます。If a variable is of a reference type, assigning Nothing to the variable sets it to a null reference of the variable's type. null 参照に設定されている変数は、どのオブジェクトにも関連付けられていません。A variable that is set to a null reference is not associated with any object. この動作を次の例で示します。The following example demonstrates this:

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かどうかを確認する場合は、= Nothing または <> Nothingを使用しないでください。When checking whether a reference (or nullable value type) variable is null, do not use = Nothing or <> Nothing. 常に Is Nothing または IsNot Nothingを使用します。Always use Is Nothing or IsNot Nothing.

Visual Basic 内の文字列の場合、空の文字列は Nothingと等しくなります。For strings in Visual Basic, the empty string equals Nothing. したがって、"" = Nothing は true になります。Therefore, "" = Nothing is true.

次の例では、Is 演算子と IsNot 演算子を使用する比較を示します。The following example shows comparisons that use the Is and IsNot operators:

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になります。If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. この例としては、Dim something = Nothingがあります。An example of this is Dim something = Nothing. この場合、Option Strict がオンで Option Infer がオフになっていると、コンパイル時エラーが発生します。A compile-time error occurs in this case when Option Strict is on and Option Infer is off.

オブジェクト変数に Nothing を割り当てると、オブジェクトインスタンスを参照しなくなります。When you assign Nothing to an object variable, it no longer refers to any object instance. 変数が以前にインスタンスを参照していた場合、その変数を Nothing に設定しても、インスタンス自体は終了しません。If the variable had previously referred to an instance, setting it to Nothing does not terminate the instance itself. インスタンスが終了し、そのインスタンスに関連付けられているメモリおよびシステムリソースが解放されるのは、ガベージコレクター (GC) によってアクティブな参照が残っていないことが検出された後のみです。The instance is terminated, and the memory and system resources associated with it are released, only after the garbage collector (GC) detects that there are no active references remaining.

Nothing は、初期化されていない variant または存在しないデータベース列を表す DBNull オブジェクトとは異なります。Nothing differs from the DBNull object, which represents an uninitialized variant or a nonexistent database column.

参照See also