C# Nullable Tipler

Bilindiği üzere bir value tipine null değer atanamaz. Örneğin, int i = null size bir derleme zamanı hatası verecektir.

Ama C# 2.0 ile birlikte value tipli değişkenlere null atamanıza izin veren null yapılabilir tipler tanıtıldı. T’nin bir tip olduğu Nullable<t> öğesini kullanarak null yapılabilir tipler bildirebilirsiniz.

Nullable<int> i = null;

Yukarıda ki kullanım ile null yapılabilir bir tip, temel alınan value tip için doğru değer aralığında bir değere ek olarak bir null değeri temsil edebilir. Örneğin, Nullable<int> öğesine -2147483648 ile 2147483647 arasında herhangi bir değer veya null bir değer atanabilir.

Nullable Tipler Kısa Sözdizimi

Nullable tip oluşturmak ‘?’ operatörünü kullanarak sözdizimini kısaltabilirsiniz. Nullable<int> kullanmak yerine int? şeklinde kullanabilirsiniz.

int? i = null;
double? D = null;

?? Operatörü

Null yapılabilir olmayan bir tipe null yapılabilir bir tip atamak için kullanılan operatördür (??).

int? i = null;
int j = i ?? 0;
Console.WriteLine(j);

Sonuç: 0

Yukarıdaki örnekte, i null yapılabilir bir int’dir ve onu null yapılamayan int j’ye atarsanız, i null ise bir çalışma zamanı istisnası atar. İstisna riskini azaltmak için boş olması durumunda j’ye 0 atanacağını belirtmek için ‘??’ operatörünü kullanırız.

Nullable Helper Class (Yardımcı Sınıf)

Null, herhangi bir değerden daha küçük olarak kabul edilir. Dolayısıyla karşılaştırma operatörüler null’a karşı çalışmaz. Örneğin:

static void Main(string[] args)
{
    int? i = null;
    int j = 10;


    if (i < j)
        Console.WriteLine("i < j");
    else if( i > 10)
        Console.WriteLine("i > j");
    else if( i == 10)
        Console.WriteLine("i == j");
    else
        Console.WriteLine("Karşılaştırılamadı");
}

Sonuç: Karşılaştırılamadı.

Null yapılabilir bir statik sınıf, Null yapılabilir tipler için bir yardımcı sınıftır. Null yapılabilir tipleri karşılaştırmak için bir karşılaştırma metodu sağlar. Ayrıca, null yapılabilir tiplerin temel alınan tip bağımsız değişkenini döndüren bir GetUnderlyingType metoduna da sahiptir.

static void Main(string[] args)
{
    int? i = null;
    int j = 10;

    if (Nullable.Compare<int>(i, j) < 0)
        Console.WriteLine("i < j");
    else if (Nullable.Compare<int>(i, j) > 0)
        Console.WriteLine("i > j");
    else
        Console.WriteLine("i = j");
} 

Sonuç: i < j

Null Yapılabilir Tiplerin Özellikleri

  • Null yapılabilen tipler yalnızca value tiplerle kullanılabilir.
  • Value null ise, Value özelliği bir InvalidOperationException atar; aksi takdirde değeri döndürür.
  • HasValue özelliği, değişken bir değer içeriyorsa true, null ise false döndürür.
  • == ve != operatörlerini yalnızca null yapılabilir bir tiple kullanabilirsiniz. Diğer karşılaştırmalar için Nullable statik sınıfını kullanın.
  • İç içe null yapılabilir türlere izin verilmez. Nullable<Nullable<int>> i; derleme zamanı hatası verecektir.

One comment

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir