null 許容値型 (Visual Basic)Nullable Value Types (Visual Basic)

特定の状況で定義されている値を持たない値の型と連携することがあります。Sometimes you work with a value type that does not have a defined value in certain circumstances. たとえば、データベース内のフィールドは、意味のある割り当てられた値を持つ、割り当てられた値がないとを区別する必要があります。For example, a field in a database might have to distinguish between having an assigned value that is meaningful and not having an assigned value. 値の型は、通常の値または null 値のいずれかを拡張できます。Value types can be extended to take either their normal values or a null value. このような拡張機能が呼び出された、 null 許容型です。Such an extension is called a nullable type.

各 null 許容型がジェネリックから構築されたNullable<T>構造体。Each nullable type is constructed from the generic Nullable<T> structure. 作業に関連するアクティビティを追跡するデータベースを検討してください。Consider a database that tracks work-related activities. 次の例は、null 許容型を構築Booleanを入力し、その型の変数を宣言します。The following example constructs a nullable Boolean type and declares a variable of that type. 宣言は、次の 3 つの方法で記述できます。You can write the declaration in three ways:

Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)

変数ridesBusToWorkの値を保持できるTrue、値のFalse、またはすべての値はありません。The variable ridesBusToWork can hold a value of True, a value of False, or no value at all. 初期の既定値はありません値すべての例ではこの可能性があること、情報がない取得されていないこのユーザーの。Its initial default value is no value at all, which in this case could mean that the information has not yet been obtained for this person. これに対し、False情報が取得され、ユーザーが仕事のバスをオーバーライドしていないことを意味します。In contrast, False could mean that the information has been obtained and the person does not ride the bus to work.

変数とプロパティを宣言するには、null 許容型で、null 許容型の要素を含む配列を宣言することができます。You can declare variables and properties with nullable types, and you can declare an array with elements of a nullable type. Null 許容型をパラメーターとしてでプロシージャを宣言してから null 許容型を返すことができます、Functionプロシージャです。You can declare procedures with nullable types as parameters, and you can return a nullable type from a Function procedure.

参照型、配列などに null 許容型を構築することはできません、 String、またはクラス。You cannot construct a nullable type on a reference type such as an array, a String, or a class. 基になる型は、値型である必要があります。The underlying type must be a value type. 詳細については、次を参照してください。値型と参照型です。For more information, see Value Types and Reference Types.

Null 許容型の変数を使用します。Using a Nullable Type Variable

Null 許容型の最も重要なメンバーは、そのHasValueValueプロパティです。The most important members of a nullable type are its HasValue and Value properties. Null 許容型の変数に対してHasValue変数が定義済みの値を含むかどうかがわかります。For a variable of a nullable type, HasValue tells you whether the variable contains a defined value. 場合HasValueTrueから値を読み取ることができますValueです。If HasValue is True, you can read the value from Value. なお両方HasValueValueReadOnlyプロパティです。Note that both HasValue and Value are ReadOnly properties.

既定値Default Values

Null 許容型を持つ変数を宣言するときにそのHasValueプロパティの既定値を持つFalseします。When you declare a variable with a nullable type, its HasValue property has a default value of False. つまり、既定では、変数がない基になる値の型の既定値ではなく、定義済みの値。This means that by default the variable has no defined value, instead of the default value of its underlying value type. 次の例では、変数numberOfChildren最初に値を持たない値が定義されていなくても、既定のInteger型は 0 です。In the following example, the variable numberOfChildren initially has no defined value, even though the default value of the Integer type is 0.

Dim numberOfChildren? As Integer

Null 値は、未定義または不明な値を示すために役立ちます。A null value is useful to indicate an undefined or unknown value. 場合numberOfChildrenとして宣言されたInteger情報が現在使用できないことを示す値になりますありません。If numberOfChildren had been declared as Integer, there would be no value that could indicate that the information is not currently available.

値を格納します。Storing Values

一般的な方法で変数または null 許容型のプロパティ値を格納します。You store a value in a variable or property of a nullable type in the typical way. 次の例では、変数に値を割り当てますnumberOfChildren前の例で宣言します。The following example assigns a value to the variable numberOfChildren declared in the previous example.

numberOfChildren = 2

変数または null 許容型のプロパティには定義済みの値がある場合は、割り当てられている値を持っていないの初期状態に戻すを生成できます。If a variable or property of a nullable type contains a defined value, you can cause it to revert to its initial state of not having a value assigned. 変数またはプロパティを設定して、これを行うNothing次の例を示します。You do this by setting the variable or property to Nothing, as the following example shows.

numberOfChildren = Nothing


割り当てることはできますNothing、null 許容型の変数にすることはできないことをテスト用Nothing等号 (=) を使用しています。Although you can assign Nothing to a variable of a nullable type, you cannot test it for Nothing by using the equal sign. 等号 (=) を使用する比較someVar = Nothing、常に評価Nothingです。Comparison that uses the equal sign, someVar = Nothing, always evaluates to Nothing. 変数をテストするHasValueプロパティFalse、またはを使用してテスト、IsまたはIsNot演算子。You can test the variable's HasValue property for False, or test by using the Is or IsNot operator.

値を取得します。Retrieving Values

Null 許容型の変数の値を取得する必要があります最初をテストするそのHasValueプロパティに値を使用していることを確認します。To retrieve the value of a variable of a nullable type, you should first test its HasValue property to confirm that it has a value. 値を読み取るしようとする場合とHasValueFalse、Visual Basic をスロー、InvalidOperationException例外。If you try to read the value when HasValue is False, Visual Basic throws an InvalidOperationException exception. 次の例では、変数を読み取ることをお勧めnumberOfChildren前の例です。The following example shows the recommended way to read the variable numberOfChildren of the previous examples.

If numberOfChildren.HasValue Then
    MsgBox("There are " & CStr(numberOfChildren) & " children.")
    MsgBox("It is not known how many children there are.")
End If

Null 許容型を比較します。Comparing Nullable Types

Null 許容とBoolean変数がブール式で使用される、結果を指定できますTrueFalse、またはNothingです。When nullable Boolean variables are used in Boolean expressions, the result can be True, False, or Nothing. 真理値表を次に示しますAndOrです。The following is the truth table for And and Or. b1b23 つの値があるようになりました 9 つの組み合わせを評価します。Because b1 and b2 now have three possible values, there are nine combinations to evaluate.

B1b1 B2b2 b1 と b2b1 And b2 b1 または b2b1 Or b2
Nothing Nothing Nothing Nothing
Nothing True Nothing True
Nothing False False Nothing
True Nothing Nothing True
True True True True
True False False True
False Nothing False Nothing
False True False True
False False False False

ブール値変数または式の値がNothingはどちらもtruefalseします。When the value of a Boolean variable or expression is Nothing, it is neither true nor false. 例を次に示します。Consider the following example.

Dim b1? As Boolean
Dim b2? As Boolean
b1 = True
b2 = Nothing

' The following If statement displays "Expression is not true".
If (b1 And b2) Then
    Console.WriteLine("Expression is true")
    Console.WriteLine("Expression is not true")
End If

' The following If statement displays "Expression is not false".
If Not (b1 And b2) Then
    Console.WriteLine("Expression is false")
    Console.WriteLine("Expression is not false")
End If

この例ではb1 And b2に評価されるNothingです。In this example, b1 And b2 evaluates to Nothing. その結果、Else各句が実行されてIfステートメントでは、呼び出し力には、次のようにします。As a result, the Else clause is executed in each If statement, and the output is as follows:

Expression is not true

Expression is not false


AndAlso およびOrElse、最初の評価が、2 番目のオペランドを評価する必要がありますを使用するショート サーキット評価、Nothingです。AndAlso and OrElse, which use short-circuit evaluation, must evaluate their second operands when the first evaluates to Nothing.


算術演算子、比較、shift キーを押し、または種類の操作のオペランドの一方または両方が null 許容の場合は、操作の結果も null 値を許容できます。If one or both of the operands of an arithmetic, comparison, shift, or type operation is nullable, the result of the operation is also nullable. 両方のオペランドが値ではないNothing、どちらもが場合と同様に、オペランドの基になる値に対して操作を実行 null 許容型。If both operands have values that are not Nothing, the operation is performed on the underlying values of the operands, as if neither were a nullable type. 次の例では、変数compare1sum1は暗黙的に型指定されています。In the following example, variables compare1 and sum1 are implicitly typed. 上にマウス ポインターを置くと場合、コンパイラがそれらの両方に対して null 許容型を推測することが表示されます。If you rest the mouse pointer over them, you will see that the compiler infers nullable types for both of them.

' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2

' The comparison evaluated is 3 > 2, but compare1 is inferred to be of 
' type Boolean?.
Dim compare1 = m > n
' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
Dim sum1 = m + n

' The following line displays: 3 * 2 * 5 * True
Console.WriteLine($"{m} * {n} * {sum1} * {compare1}")

1 つまたは両方のオペランドの値を持つ場合Nothing、結果になりますNothingです。If one or both operands have a value of Nothing, the result will be Nothing.

' Change the value of n to Nothing.
n = Nothing

Dim compare2 = m > n
Dim sum2 = m + n

' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")

Null 許容型のデータを使用します。Using Nullable Types with Data

データベースは、null 許容型を使用する最も重要な場所の 1 つです。A database is one of the most important places to use nullable types. すべてのデータベース オブジェクトは null 許容の型を現在サポートしていますが、デザイナーで生成されたテーブルのアダプターです。Not all database objects currently support nullable types, but the designer-generated table adapters do. 「Null 許容型の TableAdapter サポート」を参照してくださいTableAdapter の概要です。See "TableAdapter Support for Nullable Types" in TableAdapter Overview.

関連項目See Also

Null 許容型の使用Using Nullable Types
データの種類Data Types
値型と参照型Value Types and Reference Types
トラブルシューティング (データ型)Troubleshooting Data Types
TableAdapter の概要TableAdapter Overview
If 演算子If Operator
ローカル型の推論Local Type Inference
Is 演算子Is Operator
IsNot 演算子IsNot Operator