เนื่องจากลักษณะของชนิดข้อมูลวันที่ / เวลาไม่สามารถมี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 # ผู้เชี่ยวชาญในตอนนี้ :)