เนื่องจากลักษณะของชนิดข้อมูลวันที่ / เวลาไม่สามารถมีnullค่าได้เช่นจำเป็นต้องมีค่าจึงไม่สามารถว่างเปล่าหรือไม่มีอะไรเลย หากคุณทำเครื่องหมายตัวแปรวันที่ / เวลาเป็นnullableเพียงคุณเท่านั้นที่สามารถกำหนดค่า Null ให้กับมันได้ ดังนั้นสิ่งที่คุณต้องการทำคือหนึ่งในสองสิ่ง (อาจมีมากกว่านั้น แต่ฉันนึกได้แค่สองอย่างเท่านั้น):
กำหนดค่าวันที่ / เวลาขั้นต่ำให้กับตัวแปรของคุณหากคุณไม่มีค่า คุณสามารถกำหนดค่าวันที่ / เวลาสูงสุดได้เช่นกัน เพียงตรวจสอบให้แน่ใจว่าคุณมีความสอดคล้องทั่วทั้งไซต์เมื่อตรวจสอบค่าวันที่ / เวลา ตัดสินใจเกี่ยวกับการใช้minหรือmaxติดกับมัน
ทำเครื่องหมายตัวแปรวันที่ / nullableเวลาของคุณเป็น วิธีนี้คุณสามารถตั้งค่าตัวแปรวันที่ / เวลาของnullคุณเป็นหากคุณไม่มีตัวแปร
ให้ฉันสาธิตจุดแรกของฉันโดยใช้ตัวอย่าง DateTimeชนิดตัวแปรที่ไม่สามารถกำหนดให้เป็นโมฆะจะต้องมีค่าในกรณีนี้ฉันกำลังจะไปตั้งไปยังDateTime's ค่าต่ำสุดถ้าไม่มีค่า
สถานการณ์ของฉันคือฉันมีBlogPostชั้นเรียน มันมีฟิลด์ / คุณสมบัติต่าง ๆ มากมาย แต่ฉันเลือกที่จะใช้สองอย่างสำหรับตัวอย่างนี้เท่านั้น DatePublishedคือเมื่อโพสต์เผยแพร่ในเว็บไซต์และต้องมีค่าวันที่ / เวลา DateModifiedคือเมื่อมีการแก้ไขโพสต์ดังนั้นจึงไม่จำเป็นต้องมีค่า แต่สามารถมีค่าได้
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
การใช้ADO.NETเพื่อรับข้อมูลจากฐานข้อมูล (กำหนดDateTime.MinValueว่าไม่มีค่า):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
คุณสามารถบรรลุจุดที่สองของฉันโดยการทำเครื่องหมายฟิลด์เป็นDateModified nullableตอนนี้คุณสามารถตั้งค่าเป็นnullหากไม่มีค่า:
public DateTime? DateModified { get; set; }
การใช้ADO.NETเพื่อรับข้อมูลจากฐานข้อมูลจะมีลักษณะแตกต่างจากวิธีที่ทำข้างต้นเล็กน้อย (การกำหนดnullแทนDateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
ฉันหวังว่านี่จะช่วยขจัดความสับสน เนื่องจากคำตอบของฉันประมาณ 8 ปีต่อมาคุณอาจเป็นโปรแกรมเมอร์ C # ผู้เชี่ยวชาญในตอนนี้ :)