Bu soruya inanılmaz derecede geç kaldığımı biliyorum, ancak C #'ın en son büyük yinelemesinin piyasaya sürülmeye yaklaşması ve ardından yayınlanmasıyla cevabın alakalı hale geleceğini hissediyorum. C # 8.0'da büyük bir değişiklik olacak, C # tüm türlerin boş olmadığını varsayacaktır .
Mads Torgersen'e göre:
Sorun, boş referansların çok kullanışlı olmasıdır. C # 'da, her başvuru türünün varsayılan değeridirler. Varsayılan değer başka ne olabilir? Siz ona başka ne atayacağınıza karar verene kadar bir değişkenin başka hangi değeri olurdu? Siz onu doldurana kadar, yeni tahsis edilmiş bir referans dizisini başka hangi değeri ortaya koyabiliriz?
Ayrıca bazen boş, kendi başına mantıklı bir değerdir. Bazen, diyelim ki bir alanın bir değeri olmadığı gerçeğini temsil etmek istersiniz. Bir parametre için "hiçbir şey" geçmenin sorun olmadığını. Vurgu bazen üzerindedir. Ve burada sorunun başka bir kısmı yatıyor: C # gibi diller, tam burada bir boşluğun iyi bir fikir olup olmadığını ifade etmenize izin vermez.
Mads tarafından özetlenen çözüm şudur:
Bir referansın boş kalmamasını istemenin daha yaygın olduğuna inanıyoruz. Null atanabilir başvuru türleri daha nadir tür olacaktır (ancak bize ne kadar olduğunu söyleyecek iyi verilerimiz olmasa da), bu nedenle yeni bir açıklama gerektirenler bunlar.
Dil, null yapılabilir değer türleri için bir nosyon ve sözdizimine zaten sahiptir. İkisi arasındaki benzerlik, dil eklemeyi kavramsal olarak daha kolay ve dilbilimsel olarak daha basit hale getirecektir.
İstediğinize aktif olarak karar vermedikçe, kendinize veya tüketicinize hantal boş değerlerle yük olmamanız doğru görünüyor. Null'lar, yokluğu değil, açıkça seçmeniz gereken şey olmalıdır.
İstenen özelliğe bir örnek:
public class Person
{
public string Name { get; set; }
public string? Address { get; set; }
}
Önizleme, Visual Studio 2017, 15.5.4+ önizleme için kullanılabilir.