Typy o wartości zerowalnej (Visual Basic)

Czasami można pracować z typ wartości, która nie ma wartości zdefiniowanej w pewnych okolicznościach.Na przykład pola w bazie danych muszą rozróżnienie między posiadające przypisaną wartość, która ma znaczenie, nie posiadające przypisaną wartość.Typy wartości można rozszerzony o ich normalnej wartości lub wartość null.Takie rozszerzenie jest nazywany typem niewymaganym.

Każdego typu null jest zbudowane z rodzajową Nullable struktury.Należy wziąć pod uwagę bazy danych, umożliwiający śledzenie działań związanych z pracą.Poniższy przykład tworzy nullable Boolean typu i deklaruje zmienną typu.Zgłoszenia można napisać na trzy sposoby:

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

Zmienna ridesBusToWork może zawierać wartości z True, wartość False, lub nie wartości w ogóle.Jego wartość początkową domyślną jest żadnej wartości na wszystkich które w takim przypadku może oznaczać że informacji nie ma jeszcze uzyskane dla tej osoby.Z drugiej strony False oznacza, że informacje zostały uzyskane i osoby nie jeździć magistrali do pracy.

Można zadeklarować właściwości i zmiennych typu NULL i można zadeklarować tablicy z elementami typem niewymaganym.Procedury można zadeklarować typu NULL jako parametry i może zwracać typem niewymaganym z Function procedury.

Nie można skonstruować typem niewymaganym na typ odwołania, takich jak tablica, String, lub klasy.Typ podstawowy musi być typu wartości.Aby uzyskać więcej informacji, zobacz Typy wartości i odwołań.

Za pomocą zmiennej typu null

Najważniejsze składniki typu NULL są jej HasValue i Value właściwości.Dla zmiennej typu null HasValue informuje, czy zmienna zawiera zdefiniowana wartość.Jeśli HasValue jest True, można odczytać wartości z Value.Należy zauważyć, że zarówno HasValue i Value są ReadOnly właściwości.

Wartości domyślne

Przy deklarowaniu zmiennej z typem niewymaganym jej HasValue właściwość ma wartość domyślną False.Oznacza to, domyślnie zmienna ma zdefiniowane wartości, zamiast wartości domyślne typu wartości.W poniższym przykładzie zmienna numberOfChildren początkowo nie ma zdefiniowanych wartości, nawet jeśli wartości domyślne Integer typu jest 0.

Dim numberOfChildren? As Integer

Aby wskazać wartość nieznaną lub niezdefiniowaną przydaje się wartość null.Jeśli numberOfChildren zostały zgłoszone jako Integer, byłoby żadnej wartości, który może wskazać informacje nie są obecnie dostępne.

Przechowywanie wartości

Wartości są przechowywane w zmiennej lub właściwości typu null w typowy sposób.Poniższy przykład przypisuje wartość zmiennej numberOfChildren zadeklarowanej w poprzednim przykładzie.

numberOfChildren = 2

Jeśli zmienną lub właściwość typu null zawiera zdefiniowana wartość, może spowodować ją przywrócić do stanu początkowego o nie posiadające wartość przypisana.Można to zrobić, ustawiając zmienną lub właściwość, aby Nothing, jak pokazano na poniższym przykładzie.

numberOfChildren = Nothing

[!UWAGA]

Chociaż można przypisać Nothing do zmiennej typu NULL, nie można przetestować go dla Nothing przy użyciu znaku równości.Porównanie, który używa znaku równości someVar = Nothing, zawsze ma wartość Nothing.Można przetestować zmiennej HasValue właściwość False, lub testowania przy użyciu Is lub IsNot operatora.

Pobieranie wartości

Aby pobrać wartość zmiennej typu NULL, najpierw należy przetestować jego HasValue właściwość, aby potwierdzić, że ma ona wartość.Podczas próby odczytania wartości po HasValue jest False, Visual Basic wyrzuca InvalidOperationException wyjątku.W poniższym przykładzie pokazano zalecany sposób odczytać zmiennej numberOfChildren z poprzednich przykładach.

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

Porównanie typów Nullable

Gdy nullable Boolean zmienne są używane w wyrażeniach logicznych, wynik może być True, False, lub Nothing.Oto tabeli prawdy dla And i Or.Ponieważ b1 i b2 mają teraz trzy możliwe wartości istnieje dziewięć kombinacji do oceny.

B1

B2

B1 i b2

B1 lub 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

Kiedy wartość zmiennej typu Boolean lub wyrażenie jest Nothing, ani nie jest true ani false.Rozważmy następujący przykład.

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

W tym przykładzie b1 And b2 wynikiem Nothing.W związku z powyższym Else klauzuli jest wykonywany w każdym If instrukcji i produkcja jest w następujący sposób:

Expression is not true

Expression is not false

[!UWAGA]

AndAlsoi OrElse, których zwarcie oceny, musi oszacować ich drugim argumentem, gdy wynikiem pierwszego Nothing.

Propagacja

Jedno lub oba operandy arytmetyczne, porównania, shift lub typ operacji jest NULL, wynik operacji jest również nullable.Jeśli oba operandy wartości, które nie są Nothing, operacja jest wykonywana na podstawowych wartościach argumentów, tak jakby był ani typem niewymaganym.W poniższym przykładzie, zmienne compare1 i sum1 wpisywane są niejawnie.Jeśli wskaźnik myszy nad nimi, pojawi się że kompilator ustali typu NULL dla obu z nich.

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

Jeżeli jeden lub oba argumenty mają wartość Nothing, wynik będzie 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 * * *
Console.WriteLine(m & " * " & n & " * " & sum2 & " * " & compare2)

Za pomocą Nullable typów danych

Baza danych jest jednym z najważniejszych miejsc ze stosowaniem typu null.Nie wszystkie obiekty bazy danych aktualnie obsługuje nullable typów, ale czy karty generowane przez projektanta tabeli.Zobacz "TableAdapter obsługi typów Nullable" w TableAdapter — Przegląd.

Zobacz też

Zadania

Rozwiązywanie problemów związanych z typami danych (Visual Basic)

Informacje

Używanie typów dopuszczających wartości zerowe (Przewodnik programowania w języku C#)

InvalidOperationException

If — Operator (Visual Basic)

Is — Operator (Visual Basic)

IsNot — Operator (Visual Basic)

HasValue

Koncepcje

Typy danych w Visual Basic

Typy wartości i odwołań

TableAdapter — Przegląd

Wnioskowanie o typie lokalnym (Visual Basic)