Saya tahu saya sangat terlambat untuk pertanyaan ini, tetapi saya merasa jawabannya akan menjadi relevan karena iterasi utama terbaru dari C # mendekati rilis, kemudian dirilis. Dalam C # 8.0 perubahan besar akan terjadi, C # akan menganggap semua jenis dianggap tidak null.
Menurut Mads Torgersen:
Masalahnya adalah bahwa referensi nol sangat berguna. Di C #, mereka adalah nilai default dari setiap tipe referensi. Apa lagi nilai defaultnya? Nilai lain apa yang akan dimiliki variabel, sampai Anda dapat memutuskan apa lagi yang akan diberikan padanya? Nilai apa lagi yang bisa kita buat untuk melengkapi array referensi yang baru saja dialokasikan, sampai Anda sempat mengisinya?
Juga, terkadang null adalah nilai yang masuk akal. Terkadang Anda ingin merepresentasikan fakta bahwa, katakanlah, sebuah bidang tidak memiliki nilai. Tidak masalah untuk meneruskan "nothing" untuk sebuah parameter. Namun, penekanannya kadang-kadang. Dan di sinilah letak bagian lain dari masalah: Bahasa seperti C # tidak membiarkan Anda mengungkapkan apakah null di sini adalah ide yang bagus atau tidak.
Jadi resolusi yang digariskan oleh Mads, adalah:
Kami percaya bahwa lebih umum menginginkan referensi tidak nol. Jenis referensi yang tidak dapat dibatalkan akan menjadi jenis yang lebih langka (meskipun kami tidak memiliki data yang baik untuk memberi tahu kami seberapa banyak), jadi merekalah yang harus memerlukan anotasi baru.
Bahasa ini sudah memiliki pengertian - dan sintaks untuk - tipe nilai nullable. Analogi antara keduanya akan membuat penjumlahan bahasa lebih mudah secara konseptual, dan lebih sederhana secara linguistik.
Tampaknya benar bahwa Anda tidak boleh membebani diri sendiri atau konsumen Anda dengan nilai nol yang tidak praktis kecuali Anda secara aktif memutuskan bahwa Anda menginginkannya. Null, bukan ketiadaan, harus menjadi hal yang harus Anda pilih secara eksplisit.
Contoh fitur yang diinginkan:
public class Person
{
public string Name { get; set; } // Not Null
public string? Address { get; set; } // May be Null
}
Pratinjau tersedia untuk Visual Studio 2017, 15.5.4+ pratinjau.