ฉันรู้ว่าฉันมาสายอย่างไม่น่าเชื่อสำหรับคำถามนี้ แต่ฉันรู้สึกว่าคำตอบจะมีความเกี่ยวข้องเมื่อการทำซ้ำครั้งใหญ่ล่าสุดของ C # ใกล้จะออกแล้ว ใน C # 8.0 จะเกิดการเปลี่ยนแปลงที่สำคัญ C # จะถือว่าทุกประเภทไม่เป็นโมฆะ
ตาม Mads Torgersen:
ปัญหาคือการอ้างอิงว่างมีประโยชน์มาก ใน C # เป็นค่าเริ่มต้นของการอ้างอิงทุกประเภท ค่าเริ่มต้นจะเป็นอย่างไร ตัวแปรจะมีค่าอะไรอีกจนกว่าคุณจะสามารถตัดสินใจได้ว่าจะกำหนดค่าอะไรอีก ค่าอื่นใดที่เราสามารถปูอาร์เรย์การอ้างอิงที่จัดสรรใหม่ได้จนกว่าคุณจะกรอกข้อมูลลงไป
นอกจากนี้บางครั้งค่าว่างก็เป็นค่าที่สมเหตุสมผลในตัวของมันเอง บางครั้งคุณต้องการแสดงความจริงที่ว่าเขตข้อมูลไม่มีค่า เป็นเรื่องปกติที่จะส่ง "nothing" สำหรับพารามิเตอร์ แม้ว่าบางครั้งจะเน้น และในที่นี้เป็นอีกส่วนหนึ่งของปัญหา: ภาษาเช่น C # อย่าให้คุณระบุว่าโมฆะตรงนี้เป็นความคิดที่ดีหรือไม่
ดังนั้นความละเอียดที่ Mads ระบุไว้คือ:
เราเชื่อว่าเป็นเรื่องธรรมดาที่จะต้องการให้ข้อมูลอ้างอิงไม่เป็นค่าว่าง ประเภทการอ้างอิงที่เป็นโมฆะจะเป็นประเภทที่หายากกว่า (แม้ว่าเราจะไม่มีข้อมูลที่ดีพอที่จะบอกเราได้ว่ามีมากแค่ไหนก็ตาม) ดังนั้นจึงเป็นประเภทที่ควรต้องมีคำอธิบายประกอบใหม่
ภาษามีแนวคิดเกี่ยวกับ - และไวยากรณ์สำหรับ - ประเภทค่าที่เป็นโมฆะอยู่แล้ว การเปรียบเทียบระหว่างทั้งสองจะทำให้การเพิ่มภาษาในเชิงแนวคิดง่ายขึ้นและง่ายขึ้นในทางภาษา
ดูเหมือนถูกแล้วที่คุณไม่ควรสร้างภาระให้กับตัวเองหรือผู้บริโภคด้วยค่า null ที่ยุ่งยากเว้นแต่คุณจะตัดสินใจอย่างจริงจังว่าต้องการ Nulls ไม่ใช่การไม่มีอยู่ควรเป็นสิ่งที่คุณต้องเลือกใช้อย่างชัดเจน
ตัวอย่างคุณสมบัติที่ต้องการ:
public class Person
{
public string Name { get; set; }
public string? Address { get; set; }
}
ตัวอย่างมีให้สำหรับ Visual Studio 2017, 15.5.4+ พรีวิว