Aracılığıyla paylaş


Null Atanabilir 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, bir veritabanındaki alanın, anlamlı bir değere atanmış olma durumu ile hiç bir değere atanmış olmama durumunu ayırt etmesi gerekebilir. 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.

Null yapılabilir her değer türü, genel Nullable<T> yapısından oluşturulur. İşle ilgili etkinlikleri izleyen bir veritabanı düşünün. Aşağıdaki örnek bir "Nullable" Boolean 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şken ridesBusToWork, True değerini, False değerini veya hiç değer tutamaz. İlk varsayılan değeri aslında hiç bir değer değildir, bu da bu kişi için bilgilerin henüz elde edilmediği 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.

Diziler, String veya sınıflar gibi başvuru türleri üzerinde null değer ataması yapılabilir bir tür oluşturamazsınız. Alt tür mutlaka bir değer türü olmalıdır. Daha fazla bilgi için bkz. Değer Türleri ve Başvuru Türleri.

Nullable Tür Değişkeni Kullanımı

Null değer atanabilir türünün en önemli üyeleri HasValue ve Value özellikleridir. 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. Eğer HasValueTrue ise, değeri Value 'den okuyabilirsiniz. HasValue ve Value'in ReadOnly özellikler olduğunu 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 numberOfChildrenInteger 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 numberOfChildrenbildirilmiş olsaydıInteger, 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 türdeki bir değişken veya özellik tanımlı bir değer içeriyorsa, bu değerin atanmadığı ilk duruma geri dönmesini sağlayabilirsiniz. Bunu, aşağıdaki örnekte gösterildiği gibi değişkeni veya özelliği olarak Nothingayarlayarak yaparsınız.

numberOfChildren = Nothing

Uyarı

Null atanabilir değer türüne ait bir değişkene Nothing atayabilmenize rağmen, eşittir işaretini kullanarak Nothing test edemezsiniz. eşittir işaretini kullanan karşılaştırma, someVar = Nothingher zaman olarak Nothingdeğerlendirilir. değişkenin HasValue özelliğini False için test edebilir veya Is ya da IsNot işlecini kullanarak test edebilirsiniz.

Değerler Getiriliyor

Null yapılabilir değer türündeki bir değişkenin değerini almak için önce bir değere sahip olduğunu onaylamak amacıyla özelliğini test etmelisiniz. olduğunda HasValueFalsedeğ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

Nullablle Türleri Karşılaştırma

Boolean ifadelerinde Boolean null atanabilir değişkenler kullanıldığında, sonuç True, False veya Nothing olabilir. Aşağıdaki And ve Or için doğruluk tablosudur. 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

Boolean değişkeninin veya ifadesinin değeri Nothing olduğunda, ne true ne de false olur. Aşağıdaki örneği göz önünde bulundurun.

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 b2Nothing olarak değerlendirilir. Sonuç olarak, Else ifadesi her bir If ifadesinde yürütülür ve çıktı aşağıdaki gibidir:

Expression is not true

Expression is not false

Uyarı

AndAlso ve OrElse, kısa devre değerlendirmesi kullanan, ilki 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 değeri Nothing değilse, işlem işlenenlerin temel değerleri üzerinde, sanki hiçbiri null atanabilir bir değer türü değilmiş gibi gerçekleştirilir. Aşağıdaki örnekte, compare1 ve sum1 değişkenleri örtük olarak tiplenmiştir. 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 Nothingvarsa, 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>")}")

Null Atanabilir Türleri Verilerle Kullanmak

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. Yoklanabilir türler için TableAdapter desteği.

Ayrıca bakınız