Eksportuj (0) Drukuj
Rozwiń wszystko
Ten artykuł był przetłumaczony komputerowo. Oryginalny tekst zobaczysz, umieszczając wskaźnik myszy nad zdaniami w artykule. Więcej informacji.
Tłumaczenie
Oryginał

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<T> 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ń.

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 ValueReadOnly właściwości.

ms235245.collapse_all(pl-pl,VS.120).gifWartoś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.

ms235245.collapse_all(pl-pl,VS.120).gifPrzechowywanie 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 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.

ms235245.collapse_all(pl-pl,VS.120).gifPobieranie 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


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 Uwaga

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

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)


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.

Zawartość społeczności

Dodaj
Pokaż:
© 2015 Microsoft