Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tip
Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın. Daha fazla ayrıntı için dil referansında Null atanabilir değer türleri'ne bakın.
Null atanabilir değer türüT?, temel değer türünün Ttüm değerlerini ve ek null bir değeri temsil eder. Türünde int? bir değişken herhangi bir tamsayı tutar veya null "değer yok" ifadesini temsil eder.
Değer türleri, örneğin int, bool ve DateTime, varsayılan olarak null tutamaz. Bu davranış verimlidir ve birçok hatayı önler. Ancak bu sınırlama, bir değerin gerçekten eksik olabileceği durumlarda bir sorun oluşturur. Yaygın bir senaryo veritabanından okumaktır: tamsayı sütunu bir sayı içerebilir veya hiç değer içermeyebilir (NULL SQL'de).
int bu yokluğu temsil edemez, ancak int? edebilir.
Null atanabilir bir değer türü bildirme
Değer türünü boş değer atanabilir hale getirmek için ? ekleyin.
int? age = null; // integer with no value yet
double? price = 9.99; // nullable double with a value
bool? isActive = null; // boolean with no value
age = 30; // assign a value later
int?[] scores = [100, null, 85, null, 72]; // array with absent entries
Null atanabilir bir değer türünün varsayılan değeri null'dir, temel türün varsayılan değeri değildir.
Bir değerin mevcut olup olmadığını denetleme
Boş yapılabilir bir değer türünü denetlemenin ve değerini ayıklamanın önerilen yolu bir tür deseni kullanmaktır.
int? temperature = 72;
if (temperature is int degrees)
{
Console.WriteLine($"Temperature is {degrees}°F.");
}
else
{
Console.WriteLine("Temperature is not recorded.");
}
// Output: Temperature is 72°F.
Kalıp is int degrees, yalnızca temperature null değilse eşleşir ve aynı anda değeri degrees öğesine bağlar. Bir adımda hem null denetimi hem de değer ayıklamasını alırsınız.
Alternatif olarak, HasValue ve Value özelliklerini kullanın.
int? count = 42;
if (count.HasValue)
{
Console.WriteLine($"Count is {count.Value}.");
}
else
{
Console.WriteLine("Count has no value.");
}
// Output: Count is 42.
Yeni kod için deseni is T value tercih edin. Eşleşen dala sınırlandırılmış, amacı daha net hale getiren ve yanlışlıkla Value'yi bir null kontrolü dışında kullanma cazibesini ortadan kaldıran yeni bir null atanamaz değişken tanıtır. Bu koşulda bir InvalidOperationException fırlatır.
"null ile doğrudan karşılaştırabilirsiniz."
int? quantity = null;
if (quantity != null)
{
Console.WriteLine($"Quantity: {quantity.Value}");
}
else
{
Console.WriteLine("Quantity is not set.");
}
// Output: Quantity is not set.
Geri dönüş ile değer alma
Null atanabilir bir değerden null atanamaz bir değere ihtiyacınız olduğunda GetValueOrDefault veya birleştirme işlecini kullanın: ??
int? rating = null;
int result1 = rating.GetValueOrDefault(); // 0 (default for int)
int result2 = rating.GetValueOrDefault(-1); // -1 (specified fallback)
Console.WriteLine(result1); // 0
Console.WriteLine(result2); // -1
rating = 5;
int result3 = rating.GetValueOrDefault(-1); // 5 (actual value)
Console.WriteLine(result3); // 5
İşleç ?? genellikle satır içi kullanıldığında daha temizdir.
int? priority = null;
int effective = priority ?? 0; // 0 because priority is null
Console.WriteLine(effective); // 0
priority = 3;
effective = priority ?? 0; // 3 because priority has a value
Console.WriteLine(effective); // 3
Her iki yaklaşım da mevcut olduğunda gerçek değeri ve mevcut olmadığında belirttiğiniz yedek değeri döndürür.
Null değer türleriyle aritmetik
Null değer türlerinde aritmetik ve karşılaştırma işleçleri yükseltilir: işlenenlerden biri null olduğunda, sonuç bir hata yerine null olur.
int? a = 10;
int? b = 20;
int? c = null;
int? sum = a + b; // both non-null: result is 30
int? product = a * c; // one operand is null: result is null
Console.WriteLine(sum); // 30
Console.WriteLine(product.HasValue); // False — null propagates through arithmetic
Null varsayılan olarak aritmetik aracılığıyla yayılır. Null sonucunun daha fazla yayılmasını önlemek için, değeri hesaplamada kullanmadan önce ya da ?? ile GetValueOrDefault ile ayıklayın.