Tarih / saat veri türünün doğası göz önüne alındığında, bir nulldeğer içeremez , yani bir değer içermesi gerekir, boş olamaz veya hiçbir şey içeremez. Bir tarih / saat değişkenini nullableyalnızca olarak işaretlerseniz, bu değişkene yalnızca bir boş değer atayabilirsiniz. Yapmak istediğiniz iki şeyden biri (daha fazlası olabilir ama sadece iki tane düşünebilirim):
Değişkeniniz için bir değeriniz yoksa, değişkeninize minimum bir tarih / saat değeri atayın. Hangi tarihte olursa olsun, maksimum tarih / saat değeri de atayabilirsiniz. Tarih / saat değerlerinizi kontrol ederken site genelinde tutarlı olduğunuzdan emin olmanız yeterlidir. minVeya kullanmaya karar verin maxve buna bağlı kalın.
Tarih / saat değişkeninizi olarak işaretleyin nullable. Bu şekilde, değişkeniniz yoksa tarih / saat değişkeninizi olarak ayarlayabilirsiniz null.
İlk örneğimi bir örnek kullanarak göstereyim. DateTimeDeğişken türü ben bunu ayarlamak için gidiyorum bu durumda, bir değeri ihtiyacı null ayarlanamaz DateTimehiçbir değer yoksa 'ın minimum değer.
Benim senaryom bir BlogPostders var. Birçok farklı alan / özellik var ama ben sadece bu örnek için iki kullanmayı seçti. DatePublished, yayının web sitesinde yayınlandığı ve bir tarih / saat değeri içermesi gereken zamandır. DateModified, bir gönderinin değiştirildiği zamandır, bu nedenle bir değer içermesi gerekmez, ancak bir değer içerebilir.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
ADO.NETVeritabanından veri almak için kullanma (atama DateTime.MinValuedeğeri yoktur):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
DateModifiedAlanı ikinci olarak işaretleyerek ikinci noktamı başarabilirsiniz nullable. Şimdi bunun için bir nulldeğer yoksa şu şekilde ayarlayabilirsiniz :
public DateTime? DateModified { get; set; }
ADO.NETVeritabanından veri almak için kullanıldığında , yukarıda yapıldığı yöntemden biraz farklı görünecektir ( nullyerine atama DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Umarım bu herhangi bir karışıklığı gidermeye yardımcı olur. Cevabım yaklaşık 8 yıl sonra göz önüne alındığında, muhtemelen şu an uzman bir C # programcısısınız :)