C#’ta Nullable Types (Boş Değer Alabilen Türler), bir değişkenin null (tanımsız) değer alabilmesini sağlar. Null Coalescing (??) ve Null-Conditional (?.) Operatörleri ise null değerlerle çalışırken kodun daha güvenli ve okunaklı olmasını sağlar.
1. Nullable Types (Boş Değer Alabilen Türler)
C#’ta değer tipleri (int, double, bool vb.) varsayılan olarak null olamaz. Ancak Nullable<T> veya ? operatörü kullanılarak null değer alabilen değişkenler oluşturulabilir.
1.1. Nullable Tür Tanımlama
Yöntem 1: Nullable<T> sınıfı kullanarak
Nullable<int> yas = null;C#Yöntem 2: ? operatörü ile (Tercih edilen yöntem)
int? yas = null;C#Not: string ve diğer referans tipleri zaten null olabilir, Nullable<T> sadece değer tipleri için gereklidir.
1.2. Nullable Türlerle Çalışma
Değer atama ve kontrol
int? sayi = null;
if (sayi.HasValue)
{
Console.WriteLine($"Sayı: {sayi.Value}");
}
else
{
Console.WriteLine("Sayı değeri null.");
}C#Sayı değeri null.C#HasValue → Değişkenin null olup olmadığını kontrol eder.Value → Nullable değişkenin gerçek değerine erişir (null değilse).
1.3. Nullable Türlerde Varsayılan Değer Kullanımı
int? yas = null;
int normalYas = yas ?? 18; // Eğer yas null ise 18 atanır.
Console.WriteLine(normalYas); // 18C#?? operatörü, değişken null ise varsayılan bir değer döndürmek için kullanılır.
2. Null Coalescing (??) Operatörü
Null olan bir değişkenin yerine varsayılan değer atamak için ?? operatörü kullanılır.
Söz Dizimi:
değişken ?? varsayılan_değer;C#2.1. ?? Operatörü Kullanımı
string isim = null;
string sonuc = isim ?? "Varsayılan İsim";
Console.WriteLine(sonuc); // "Varsayılan İsim"C#2.2. ?? Operatörü ile Nullable Türler
int? deger = null;
int sonuc = deger ?? 100;
Console.WriteLine(sonuc); // 100C#Özet: ?? operatörü, null olan bir değişken yerine alternatif bir değer döndürür.
3. Null-Conditional (?.) Operatörü
?. operatörü, null değerli bir nesne üzerinde işlem yapmaya çalışırken hata alınmasını önler.
Söz Dizimi:
nesne?.özellik;C#3.1. ?. Operatörü Kullanımı
class Kisi
{
public string Ad { get; set; }
}
Kisi kisi = null;
// Eğer kisi null değilse Ad özelliğini alır, null ise hata vermez.
string isim = kisi?.Ad;
Console.WriteLine(isim ?? "İsim atanmadı.");
// "İsim atanmadı."C#3.2. ?. Operatörü ile Metot Çağrımı
class Kisi
{
public void SelamVer() => Console.WriteLine("Merhaba!");
}
Kisi kisi = null;
// Eğer kisi null değilse SelamVer metodu çağrılır, aksi halde hata vermez.
kisi?.SelamVer();C#Çıktı: (Boş, hata vermez)
3.3. ?. Operatörü ile Dizi Elemanlarına Erişim
int[] sayilar = null;
Console.WriteLine(sayilar?[0]);
// null döner, hata vermez.C#Özet: ?. operatörü, null olan nesnelerde hata alınmasını önler.
4. ??= Operatörü (Null Atama)
Bir değişkenin değeri null ise, ona yeni bir değer atamak için kullanılır.
Söz Dizimi:
değişken ??= yeni_değer;C#4.1. ??= Operatörü Kullanımı
string mesaj = null;
mesaj ??= "Merhaba, dünya!";
Console.WriteLine(mesaj); // "Merhaba, dünya!"C#4.2. ??= ile Nullable Türler
int? sayi = null;
sayi ??= 10;
Console.WriteLine(sayi); // 10C#Özet: ??= operatörü, değişkenin değeri null ise yeni bir değer atar.
5. Nullable Types, ??, ?. ve ??= Kullanım Karşılaştırması
| Özellik | Nullable Types (int?) | Null Coalescing (??) | Null-Conditional (?.) | Null Atama (??=) |
|---|---|---|---|---|
| Ne işe yarar? | Null değer alabilen türler oluşturur. | Null ise alternatif değer döndürür. | Null nesnelerde hata oluşmasını engeller. | Null ise yeni değer atar. |
| Kullanım Senaryosu | Nullable değişkenler (int?, double?) | Değişken null ise varsayılan değer atama | Nesne veya metod null ise hata önleme | Değişken null ise değer atama |
| Örnek | int? yas = null; | int yas = yas ?? 18; | string isim = kisi?.Ad; | isim ??= "Varsayılan"; |
6. Kullanım Alanları
| Kullanım Alanı | Önerilen Yöntem |
|---|---|
| Veritabanından gelen nullable değerleri işleme | int? yas = dbData; |
| Nullable değerler için varsayılan değer belirleme | yas ?? 18; |
| Nesne null kontrolü yaparak hata önleme | nesne?.Metot(); |
| Null olan değişkenlere başlangıç değeri atama | deger ??= 10; |