Sdílet prostřednictvím


Typy hodnot s povolenou hodnotou Null (Visual Basic)

Někdy při práci s typ hodnoty, který za určitých okolností nemá definovaná hodnota.Pole v databázi pravděpodobně muset rozlišovat mezi s přiřazenou hodnotu, který je smysluplný a nemají přiřazenou hodnotu.Typy hodnot lze rozšířit jejich běžných hodnot nebo hodnotu null.Toto rozšíření je volána Typ s možnou hodnotou Null.

Každý typ s možnou hodnotou NULL je vyrobeno z obecného Nullable struktury.Zvažte databáze, který sleduje aktivity související s prací.Následující příklad vytvoří s možnou hodnotou Null Boolean zadejte a deklaruje proměnnou typu.Prohlášení může zapisovat třemi způsoby:

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

Proměnná ridesBusToWork mohou obsahovat hodnotu True, hodnota False, nebo žádnou hodnotou vůbec.Počáteční hodnota je žádná hodnota vůbec, které v tomto případě může znamenat, že informace dosud nebylo dosaženo této osoby.Na rozdíl od False může znamenat, že získané informace a osoba není jízdní sběrnice pracovat.

S možnou hodnotou Null typy lze deklarovat proměnných a vlastností a deklarovat matice s prvky typ s možnou hodnotou Null.Postupy můžete deklarovat s možnou hodnotou Null typy jako parametry a typ s možnou hodnotou Null se můžete vrátit Function postup.

Nelze vytvořit odkaz typu jako pole, typ s možnou hodnotou Null String, nebo třídy.Základní typ musí být typu hodnoty.Další informace naleznete v tématu Typy hodnot a typy odkazu.

Pomocí proměnné typ s možnou hodnotou Null

Nejdůležitější členové s možnou hodnotou Null typu jsou jeho HasValue a Value vlastnosti.Pro proměnné s možnou hodnotou Null typu HasValue udává, zda obsahuje proměnná definovaná hodnota.Pokud HasValue je True, si můžete přečíst hodnotu z Value.Všimněte si, že obě HasValue a Value jsou ReadOnly vlastnosti.

Výchozí hodnoty

Při deklarování proměnné, s možnou hodnotou Null typu jeho HasValue má vlastnost Výchozí hodnota False.To znamená, že ve výchozím nastavení má proměnná není definovaná hodnota namísto výchozí hodnotu jeho základní typ hodnoty.V následujícím příkladu proměnné numberOfChildren nemá původně definovanou hodnotu, přestože výchozí hodnotu Integer je typ 0.

Dim numberOfChildren? As Integer

Hodnota null je užitečné, nedefinovanou nebo neznámou hodnotu.Pokud numberOfChildren byly přihlášeny jako Integer, by žádná hodnota, které označuje, že informace nejsou aktuálně k dispozici.

Ukládání hodnot

Uložit hodnotu proměnné nebo vlastností typ s možnou hodnotou Null v obvyklým způsobem.Následující příklad přiřazuje hodnotu proměnné numberOfChildren deklarované v předchozím příkladu.

numberOfChildren = 2

Proměnné nebo vlastnosti s možnou hodnotou Null typu obsahuje definovaná hodnota, může způsobit jej vrátit do původního stavu nesmí mít hodnotu přiřazenou.Provést nastavením proměnné nebo vlastnosti na Nothing, jak ukazuje následující příklad.

numberOfChildren = Nothing

[!POZNÁMKA]

Ačkoli můžete přiřadit Nothing proměnné typu s možnou hodnotou Null nelze otestovat ho pro Nothing pomocí znaménko rovná se.Porovnání, který používá znak rovná someVar = Nothing, vždy výsledkem Nothing.Můžete vyzkoušet proměnné HasValue vlastnost pro False, nebo testování pomocí Is nebo IsNot operátor.

Načítání hodnot

Chcete-li načíst hodnotu proměnné s možnou hodnotou Null typu by nejprve otestovat jeho HasValue vlastnost potvrdit, že má hodnotu.Pokud chcete načíst hodnotu při HasValue je False, Visual Basic vyvolá InvalidOperationException výjimku.Následující příklad ukazuje doporučený způsob čtení proměnné numberOfChildren z předchozích příkladů.

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

Porovnání typů s možnou hodnotou Null

Když s možnou hodnotou Null Boolean proměnných logické výrazy, může být výsledek True, False, nebo Nothing.Následuje tabulka pravdy pro And a Or.Protože b1 a b2 tří možných hodnot mají nyní existuje devět kombinací vyhodnotit.

B1

B2

B1 a b2

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

Pokud je hodnota logická proměnná nebo výraz Nothing, ani je true ani false.Zvažte následující příklad.

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

V tomto příkladu b1 And b2 vyhodnocen jako Nothing.Výsledkem Else klauzule je proveden v každém If prohlášení a výstup je následující:

Expression is not true

Expression is not false

[!POZNÁMKA]

AndAlsoa OrElse, které zkratové hodnocení musí vyhodnotit jejich druhé operandy při prvním výsledkem Nothing.

Šíření

Pokud je jeden nebo oba operandy aritmetický, relační, shift nebo typ operace s možnou hodnotou Null, je také výsledek operace s možnou hodnotou Null.Pokud oba operandy hodnoty, které nejsou Nothing, operace proběhne na podkladové hodnoty operandy, jako kdyby ani typ s možnou hodnotou Null.V následujícím příkladu proměnné compare1 a sum1 implicitně zadali.Pokud podržíte ukazatel myši nad nimi, uvidíte, že kompilátor odvodí pro oba typy s možnou hodnotou Null.

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

Pokud jeden nebo oba operandy mají hodnotu Nothing, výsledkem bude 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)

Pomocí datové typy s možnou hodnotou Null

Databáze je jedním z nejdůležitějších míst pro typy s možnou hodnotou Null.Všechny objekty databáze aktuálně podporuje typy s možnou hodnotou Null, ale nemají adaptéry generované Návrhář tabulky.Viz "Podpora TableAdapter typy s možnou hodnotou Null" v TableAdapter – přehled.

Viz také

Úkoly

Řešení potíží s datovými typy (Visual Basic)

Referenční dokumentace

Použití typů s povolenou hodnotou Null (Průvodce programováním v C#)

InvalidOperationException

If – operátor (Visual Basic)

Is – operátor (Visual Basic)

IsNot – operátor (Visual Basic)

HasValue

Koncepty

Datové typy v jazyce Visual Basic

Typy hodnot a typy odkazu

TableAdapter – přehled

Odvození místního typu (Visual Basic)