Boş bir cüzdan düşün. İçinde para yok — ama cüzdan var. Şimdi bir de cüzdanın hiç olmadığı durumu düşün. İşte null tam olarak budur: nesnenin kendisinin yokluğu.
Yazılımda bir değişken henüz hiçbir nesneye işaret etmiyorsa değeri null'dır.
Olmayan bir nesnenin metodunu çağırmaya çalışırsan program NullReferenceException fırlatır ve çöker. Bu yazılımda en sık karşılaşılan hatalardan biridir.
string isim = null;
Console.WriteLine(isim.Length); // PATLAMA: NullReferenceException
// isim null olduğu için .Length çağrılamaz
Değer tipleri (int, bool, DateTime) normalde null olamaz. Ama bazen bir sayının "henüz girilmemiş" olduğunu ifade etmek istersin. Bunun için ? kullanılır.
int sayi = null; // HATA — int null olamaz
int? sayi = null; // DOĞRU — nullable int
string? isim = null; // C# 8+ ile string de nullable olabilir
if (sayi.HasValue)
Console.WriteLine(sayi.Value);
else
Console.WriteLine("Değer girilmemiş.");
?. (null-conditional) operatörü: nesne null ise patlamak yerine null döndürür.?? (null-coalescing) operatörü: sol taraf null ise sağ taraftaki varsayılan değeri kullanır.
string? isim = null;
// ?. operatörü — null ise patlamaz, null döner
int? uzunluk = isim?.Length; // null
// ?? operatörü — null ise varsayılanı kullan
string gosterim = isim ?? "Misafir";
Console.WriteLine(gosterim); // "Misafir"
// İkisini birlikte kullanmak
string sonuc = isim?.ToUpper() ?? "BİLİNMİYOR";
Console.WriteLine(sonuc); // "BİLİNMİYOR"