Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Néha olyan értéktípussal dolgozik, amely bizonyos körülmények között nem rendelkezik meghatározott értékkel. Előfordulhat például, hogy egy adatbázis mezőinek különbséget kell tenniük egy olyan hozzárendelt érték között, amely jelentéssel bír, és nem rendelkezik hozzárendelt értékkel. Az értéktípusok kiterjeszthetők a normál vagy null értékre. Az ilyen bővítményeket null értékű típusnak nevezzük.
Minden null értékű értéktípus az általános Nullable<T> struktúrából jön létre. Vegyünk egy adatbázist, amely nyomon követi a munkával kapcsolatos tevékenységeket. Az alábbi példa egy null értékű Boolean típust hoz létre, és deklarál egy ilyen típusú változót. A deklaráció háromféleképpen írható:
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
A változó ridesBusToWork tartalmazhat értékeket True, Falseértékeket, vagy egyáltalán nem. A kezdeti alapértelmezett érték egyáltalán nem tartalmaz értéket, ami ebben az esetben azt jelentheti, hogy az információt még nem szerezték be az illető számára. Ezzel szemben azt jelentheti, hogy az információt beszerezték, False és a személy nem utazik a buszon dolgozni.
A változókat és tulajdonságokat null értékű típusokkal deklarálhatja, és null értékű elemeket tartalmazó tömböket deklarálhat. Az eljárásokat paraméterként null értékű értéktípusokkal deklarálhatja, és egy eljárásból null értékű értéktípust Function is visszaadhat.
Nem hozható létre null értéket elfogadó típus hivatkozástípuson, például tömbön, String-on vagy osztályon. Az alapul szolgáló típusnak értéktípusnak kell lennie. További információ: Értéktípusok és referenciatípusok.
Null értékű típusváltozó használata
Egy null értékeket tartalmazó adattípus legfontosabb tagjai a HasValue és a Value tulajdonságai. Egy null értékű változó esetében azt jelzi, HasValue hogy a változó tartalmaz-e definiált értéket. Ha HasValue megegyezik True-rel, akkor az értéket kiolvashatja Value-ből. Vegye figyelembe, hogy mind a HasValue, mind a ValueReadOnly tulajdonság.
Alapértelmezett értékek
Ha null értékű változót deklarál, a HasValue tulajdonság alapértelmezett értéke False. Ez azt jelenti, hogy a változó alapértelmezés szerint nem rendelkezik definiált értékkel a mögöttes értéktípus alapértelmezett értéke helyett. Az alábbi példában a változó numberOfChildren kezdetben nem rendelkezik definiált értékkel, annak ellenére, hogy a Integer típus alapértelmezett értéke 0.
Dim numberOfChildren? As Integer
A null érték akkor hasznos, ha nem definiált vagy ismeretlen értéket jelöl. Ha numberOfChildren lett volna deklarálva Integer, akkor nem lenne olyan érték, amely azt jelezné, hogy az információ jelenleg nem érhető el.
Értékek tárolása
Az értéket általában egy nullázható értéktípusú változóban vagy tulajdonságban tárolja. Az alábbi példa egy értéket rendel az előző példában deklarált változóhoz numberOfChildren .
numberOfChildren = 2
Ha egy null értékű változó vagy tulajdonság definiált értéket tartalmaz, akkor visszaállíthatja a kezdeti állapotát, mert nincs hozzárendelve érték. Ezt úgy teheti meg, hogy a változót vagy a tulajdonságot Nothinga következő példa szerint állítja be.
numberOfChildren = Nothing
Megjegyzés:
Jóllehet a Nothing hozzárendelhető egy nullable értéktípusú változóhoz, az egyenlőségjel használatával nem tesztelheti a Nothing. Az egyenlőségjelet someVar = Nothinghasználó összehasonlítás mindig a következőre Nothingértékel. A változó HasValue tulajdonságát tesztelheti False, vagy használhatja a Is vagy IsNot operátorokat.
Értékek beolvasása
Ha egy null értékű változó értékét szeretné lekérni, először tesztelje annak tulajdonságát HasValue annak ellenőrzéséhez, hogy rendelkezik-e értékkel. Ha megpróbálja elolvasni az értéket, amikor HasValueFalse, a Visual Basic InvalidOperationException kivételt dob. Az alábbi példa az előző példák változójának numberOfChildren olvasásának ajánlott módját mutatja be.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
Null értékű típusok összehasonlítása
Ha null értékű Boolean változókat használ a logikai kifejezésekben, az eredmény lehet True, Falsevagy Nothing. A következő az And és Or igazságtáblája.
b1 Mivel b2 három lehetséges értékkel rendelkezik, kilenc kombinációt kell kiértékelni.
| b1 | b2 | b1 és b2 | b1 vagy 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 |
Ha egy logikai változó vagy kifejezés értéke Nothing, akkor sem true sem false. Vegye figyelembe az alábbi példát.
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
Ebben a példában a b1 And b2 értéke Nothing. Ennek eredményeképpen a Else záradék minden If utasításban végrehajtásra kerül, és a kimenet a következő:
Expression is not true
Expression is not false
Megjegyzés:
AndAlso és OrElse, amelyek rövidzárlatos értékelést használnak, akkor kell kiértékeljék a második operandusukat, amikor az első Nothing értéket vesz fel.
Terjesztés
Ha egy aritmetikai, összehasonlítási, műszak- vagy típusművelet egyik vagy mindkét operandusa null értékű, a művelet eredménye szintén null értékű értéktípus. Ha mindkét operandus olyan értékekkel rendelkezik, amelyek nem Nothing, a művelet az operandusok mögöttes értékein történik, mintha egyik sem lenne null értékű értéktípus. Az alábbi példában a változók compare1sum1 és implicit módon vannak begépelve. Ha az egérmutatót föléjük helyezi, látni fogja, hogy a fordító null értékű értéktípusokat következtet mindkettőre.
' 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}")
Ha egy vagy mindkét operandus értéke Nothinga következő lesz: 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 értékű típusok használata adatokkal
Az adatbázis az egyik legfontosabb hely a null értékű értéktípusok használatára. Jelenleg nem minden adatbázis-objektum támogatja a null értékű típusokat, de a tervező által létrehozott táblaadapterek igen. Tekintse meg a TableAdapter null értékű típusok támogatását.