다음을 통해 공유


Nullable 값 형식(Visual Basic)

특정 상황에서 정의된 값이 없는 값 형식으로 작업하는 경우가 있습니다. 예를 들어 데이터베이스의 필드는 의미 있는 할당된 값이 있고 할당된 값이 없는 경우를 구분해야 할 수 있습니다. 값 형식은 정규 값 또는 null 값을 사용하도록 확장할 수 있습니다. 이러한 확장을 nullable 형식이라고합니다.

각 nullable 값 형식은 제네릭 Nullable<T> 구조에서 생성됩니다. 작업 관련 활동을 추적하는 데이터베이스를 고려합니다. 다음 예제에서는 nullable Boolean 형식을 생성하고 해당 형식의 변수를 선언합니다. 다음 세 가지 방법으로 선언을 작성할 수 있습니다.

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

변수 ridesBusToWorkTrue 값, False 값, 또는 값이 없을 수 있습니다. 초기 기본값은 전혀 값이 아니며, 이 경우 이 사용자에 대한 정보를 아직 얻지 못했음을 의미할 수 있습니다. 대조적으로, False 정보를 얻고 사람이 출근하기 위해 버스를 타지 않는다는 것을 의미 할 수 있습니다.

nullable 값 형식을 사용하여 변수 및 속성을 선언할 수 있으며 nullable 값 형식의 요소를 사용하여 배열을 선언할 수 있습니다. nullable 값 형식을 매개 변수로 사용하여 프로시저를 선언할 수 있으며 프로시저에서 nullable 값 형식을 Function 반환할 수 있습니다.

배열, a 또는 클래스와 같은 참조 형식에서 nullable 형식을 생성할 String수 없습니다. 기본 형식은 값 형식이어야 합니다. 자세한 내용은 값 형식 및 참조 형식을 참조하세요.

Nullable 형식 변수 사용

nullable 값 형식의 가장 중요한 멤버는 해당 HasValueValue 속성입니다. nullable 값 형식 HasValue 의 변수에 대해 변수에 정의된 값이 포함되어 있는지 여부를 알려줍니다. 이 HasValue 경우 True에서 Value 값을 읽을 수 있습니다. HasValueValue가 모두 ReadOnly 속성입니다.

기본값

nullable 값 형식으로 변수를 선언하면 해당 HasValue 속성의 False기본값은 .입니다. 즉, 기본적으로 변수에는 기본 값 형식의 기본값 대신 정의된 값이 없습니다. 다음 예제에서는 numberOfChildren 변수가 초기에는 정의된 값이 없으며, Integer 형식의 기본값은 0입니다.

Dim numberOfChildren? As Integer

null 값은 정의되지 않거나 알 수 없는 값을 나타내는 데 유용합니다. 선언이 numberOfChildren으로 이루어졌다면, 현재 정보를 사용할 수 없다는 것을 나타낼 수 있는 값이 없었을 것입니다.

값 저장

일반적으로 nullable 값 형식의 변수 또는 속성에 값을 저장합니다. 다음 예제에서는 이전 예제에서 선언된 변수 numberOfChildren 에 값을 할당합니다.

numberOfChildren = 2

nullable 값 형식의 변수 또는 속성에 정의된 값이 포함된 경우 값이 할당되지 않은 초기 상태로 되돌릴 수 있습니다. 다음 예제와 같이 변수 또는 속성을 Nothing로 설정하여 이 작업을 수행합니다.

numberOfChildren = Nothing

비고

nullable 값 형식의 변수에 Nothing를 할당할 수는 있지만, 등호를 사용하여 Nothing을 테스트할 수는 없습니다. 등호를 사용하는 비교는 someVar = Nothing 항상 Nothing으로 평가됩니다. 변수의 HasValue 속성을 False를 테스트하거나 Is, IsNot 연산자를 사용하여 테스트할 수 있습니다.

값 가져오기

nullable 값 형식의 변수 값을 검색하려면 먼저 해당 HasValue 속성을 테스트하여 값이 있는지 확인해야 합니다. HasValueFalse일 때 값을 읽으려고 하면, Visual Basic에서 InvalidOperationException 예외가 발생합니다. 다음 예제에서는 이전 예제의 변수 numberOfChildren 를 읽는 권장 방법을 보여 줍니다.

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

Nullable 형식 비교

부울 식에서 nullable Boolean 변수를 사용하는 경우 결과는 TrueFalse 또는 Nothing일 수 있습니다. 다음은 AndOr에 대한 진리 테이블입니다. b1 b2 이제 세 개의 가능한 값이 있으므로 평가할 9개의 조합이 있습니다.

b1 b2 b1 및 b2 b1 또는 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일 때, 그것은 true도 아니고 false도 아닙니다. 다음 예제를 고려해 보세요.

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")
Else
    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")
Else
    Console.WriteLine("Expression is not false")
End If

이 예제에서 b1 And b2Nothing로 평가됩니다. 결과적으로 Else 절은 각 If 문에서 실행되고 출력은 다음과 같습니다.

Expression is not true

Expression is not false

비고

AndAlsoOrElse는 단락 평가를 사용하며 첫 번째 피연산자가 Nothing로 평가될 때 두 번째 피연산자를 반드시 평가해야 합니다.

전파

산술, 비교, 시프트 또는 형식 연산의 피연산자 중 하나 또는 둘 다 null 허용 값 형식인 경우 작업의 결과는 null 허용 값 형식이기도 합니다. 두 피연산자가 모두 `Nothing`이 아닌 값을 갖고 있는 경우, 두 피연산자의 기본 값에 대해 연산이 수행되며, 이는 피연산자가 null을 허용하는 값 형식이 아닌 것처럼 처리됩니다. 다음 예제에서는 변수를 compare1sum1 암시적으로 입력합니다. 마우스 포인터를 놓으면 컴파일러가 둘 다에 대해 nullable 값 형식을 유추하는 것을 볼 수 있습니다.

' 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}")

하나 또는 두 피연산자의 값 Nothing이 있는 경우 결과는 다음과 같습니다 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>")}")

데이터와 함께 Nullable 형식 사용

데이터베이스는 nullable 값 형식을 사용하는 가장 중요한 위치 중 하나입니다. 현재 모든 데이터베이스 개체가 nullable 값 형식을 지원하지는 않지만 디자이너에서 생성된 테이블 어댑터는 지원합니다. nullable 형식에 대한 TableAdapter 지원을 참조하세요.

참고하십시오