Nullable tipler, ilgili tip‘in değer aralığına ve karakteristiğine sahip olmakla birlikte ek olarak null değer de içerebilen yapılardır.
Basit olarak, değişkenin değer içerip içermediği bilgisini saklar.
Nullable tipler, System.Nullable<T> türündedirler (T, değer tipi olmalıdır)
Unutmayın! Sadece değer tipleri (value type) nullable olabilir.
C# dili değer tipi listesi‘ne daha önce yazdığım makale veya MSDN üzerinden ulaşabilirsiniz.
C# dilinde, Nullable tipte değişkenler iki şekilde tanımlanabilir.
Birinci yöntemde, System.Nullable generic tipini ilgili değer tipi ile birlikte yazabiliriz;
System.Nullable<int> adet; System.Nullable<bool> sonuclandi;</pre>
İkinci yöntem, daha çok kullanılır ve daha kısa yazım şekline sahiptir. İlgili değer tipinin yanına soruişareti (?) karakteri koyarak yazılır;
int? adet; bool? sonuclandi;
Bir nullable değişken, tanımlandığı anda null değerini içermez, sizin null eşitlemesini yapmanız beklenir;
int? adet = null;
Nullable tipteki bir değişkene değer ataması yapmak, normal bir değişkene değer ataması yapmak ile aynıdır.
adet = 100;
Nullable bir değişkenin değer içerip içermediğini anlamanın iki yolu vardır.
Birinci yöntemde, değişkenin null olup/olmadığı kontrol edilebilir.
if (adet != null) { /// değeri var }
Eğer değişken null değilse, değer içeriyor demektir.
İkinci yöntemde, değişkenin System.Nullable tipinden gelen sadece-okunabilir (read-only) HasValue özelliği kontrol edilir.
if (adet.HasValue) { /// değeri var }
Eğer değişken değer içeriyorsa, değeri okumak için, değişkenin System.Nullable tipinden gelen Value özelliği kullanılır.
Eğer değer içermeyen nullable bir değişkenin Value özelliğinden değer okumaya çalışırsanız, System.InvalidOperationException istisnası fırlatılır.
using System; class NullableTipTest { public static void Main() { int? adet = null; if (adet.HasValue) Console.WriteLine("adet değeri: " + adet.Value); else Console.WriteLine("adet değeri yok."); adet = 10; if (adet.HasValue) Console.WriteLine("adet değeri: " + adet.Value); else Console.WriteLine("adet değeri yok."); } } Yukarıdaki kodun çıktısı şöyle *olacaktır*; >adet değeri yok. adet değeri: 10
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484