Boş Değer Atanabilen Değer Türleri (Visual Basic)
Bazen belirli durumlarda tanımlı değeri olmayan bir değer türüyle çalışırsınız. Örneğin, veritabanındaki bir alanın anlamlı ve atanmış bir değere sahip olmayan atanmış bir değere sahip olmayı ayırt etmek zorunda kalabilir. Değer türleri, normal değerlerini veya null değerlerini alacak şekilde genişletilebilir. Böyle bir uzantı null atanabilir tür olarak adlandırılır.
Her null atanabilir değer türü genel Nullable<T> yapıdan oluşturulur. İşle ilgili etkinlikleri izleyen bir veritabanı düşünün. Aşağıdaki örnek null atanabilir Boolean
bir tür oluşturur ve bu türdeki bir değişkeni bildirir. Bildirimi üç şekilde yazabilirsiniz:
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
değişkeniridesBusToWork
, False
değerini True
tutabilir veya hiç değer tutamaz. İlk varsayılan değeri hiç değer değildir, bu durumda bu kişi için bilgilerin henüz alınamadığı anlamına gelebilir. Buna karşılık, False
bilgilerin edinildiği ve kişinin işe gitmek için otobüse binmediği anlamına gelebilir.
Null atanabilir değer türlerine sahip değişkenleri ve özellikleri bildirebilir ve null atanabilir değer türü öğelerine sahip bir dizi bildirebilirsiniz. Null atanabilir değer türlerine sahip yordamları parametre olarak bildirebilir ve bir Function
yordamdan null atanabilir bir değer türü döndürebilirsiniz.
Dizi, String
, veya sınıfı gibi bir başvuru türü üzerinde null atanabilir bir tür oluşturamazsınız. Temel alınan tür bir değer türü olmalıdır. Daha fazla bilgi için bkz . Değer Türleri ve Başvuru Türleri.
Null Atanabilir Tür Değişkeni Kullanma
Null atanabilir değer türünün en önemli üyeleri ve Value özellikleridirHasValue. Null atanabilir değer türündeki bir değişken için, HasValue değişkenin tanımlı bir değer içerip içermediğini bildirir. ise HasValueTrue
, değerinden değerini Valueokuyabilirsiniz. hem Value hem de HasValue özelliklerinin özellik olduğunu ReadOnly
unutmayın.
Varsayılan Değerler
Null atanabilir değer türüne sahip bir değişken bildirdiğinizde, HasValue özelliğinin varsayılan değeri vardır False
. Bu, varsayılan olarak değişkenin temel değer türünün varsayılan değeri yerine tanımlı bir değere sahip olmadığı anlamına gelir. Aşağıdaki örnekte, türün varsayılan değeri 0 olmasına rağmen değişkenin numberOfChildren
Integer
başlangıçta tanımlı değeri yoktur.
Dim numberOfChildren? As Integer
Null değer, tanımlanmamış veya bilinmeyen bir değeri göstermek için yararlıdır. olarak Integer
bildirilmiş olsaydınumberOfChildren
, bilgilerin şu anda kullanılabilir olmadığını gösterebilecek bir değer olmazdı.
Değerleri Depolama
Bir değeri, null atanabilir bir değer türünün değişkeninde veya özelliğinde tipik bir şekilde depolarsınız. Aşağıdaki örnek, önceki örnekte bildirilen değişkene numberOfChildren
bir değer atar.
numberOfChildren = 2
Boş değer atanabilir değer türünün bir değişkeni veya özelliği tanımlı bir değer içeriyorsa, değerin atanmaması durumunda ilk durumuna geri dönmesine neden olabilirsiniz. Bunu, aşağıdaki örnekte gösterildiği gibi değişkeni veya özelliği olarak Nothing
ayarlayarak yaparsınız.
numberOfChildren = Nothing
Not
Null atanabilir bir değer türündeki bir değişkene atayabilmenize Nothing
rağmen, eşittir işaretini kullanarak değişkeni için Nothing
test edemezsiniz. eşittir işaretini kullanan karşılaştırma, someVar = Nothing
her zaman olarak Nothing
değerlendirilir. değişkeninin HasValue özelliğini için False
test edebilir veya veya IsNot
işlecini Is
kullanarak test edebilirsiniz.
Değerler Alınıyor
Null atanabilir değer türündeki bir değişkenin değerini almak için önce değerinin olduğunu onaylamak için özelliğini test HasValue etmelisiniz. olduğunda HasValueFalse
değeri okumaya çalışırsanız, Visual Basic bir InvalidOperationException özel durum oluşturur. Aşağıdaki örnekte, önceki örneklerin değişkenini numberOfChildren
okumanın önerilen yolu gösterilmektedir.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
Null Atanabilir Türleri Karşılaştırma
Boole ifadelerinde null atanabilir Boolean
değişkenler kullanıldığında, sonuç , False
veya Nothing
olabilirTrue
. ve için And
Or
doğruluk tablosu aşağıdadır. b1
Ve b2
şimdi üç olası değere sahip olduğundan, değerlendirilecek dokuz birleşim vardır.
b1 | B2 | b1 Ve b2 | b1 Veya 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 |
Boole değişkeninin veya ifadesinin değeri olduğunda Nothing
, ne de true
false
olur. Aşağıdaki örneği inceleyin.
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
Bu örnekte, b1 And b2
olarak değerlendirilir Nothing
. Sonuç olarak yan Else
tümcesi her If
deyimde yürütülür ve çıktı aşağıdaki gibidir:
Expression is not true
Expression is not false
Not
AndAlso
ve OrElse
kısa devre değerlendirmesi kullanan, ilki olarak değerlendirildiğinde ikinci işlenenlerini değerlendirmelidir Nothing
.
Yayma
Aritmetik, karşılaştırma, kaydırma veya tür işleminin işlenenlerinden biri veya her ikisi de null atanabilir bir değer türüyse, işlemin sonucu da null atanabilir bir değer türüdür. her iki işlenenin de olmayan değerleri Nothing
varsa, işlem işlenenlerin temel değerleri üzerinde null atanabilir bir değer türü değil gibi gerçekleştirilir. Aşağıdaki örnekte, ve değişkenleri compare1
sum1
örtük olarak yazıldı. Fare işaretçisini bunların üzerinde bekletirseniz, derleyicinin her ikisi için de null atanabilir değer türleri çıkardığını görürsünüz.
' 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}")
bir veya her iki işlenenin değeri Nothing
varsa, sonuç olur 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>")}")
Verilerle Null Atanabilir Türler Kullanma
Veritabanı, null atanabilir değer türlerinin kullanıldığı en önemli yerlerden biridir. Şu anda tüm veritabanı nesneleri null değer türlerini desteklemez, ancak tasarımcı tarafından oluşturulan tablo bağdaştırıcıları destekler. Bkz. Null atanabilir türler için TableAdapter desteği.