Tarih / saat veri türünün doğası göz önüne alındığında, bir null
değer içeremez , yani bir değer içermesi gerekir, boş olamaz veya hiçbir şey içeremez. Bir tarih / saat değişkenini nullable
yalnı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. min
Veya kullanmaya karar verin max
ve 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. DateTime
Değişken türü ben bunu ayarlamak için gidiyorum bu durumda, bir değeri ihtiyacı null ayarlanamaz DateTime
hiçbir değer yoksa 'ın minimum değer.
Benim senaryom bir BlogPost
ders 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.NET
Veritabanından veri almak için kullanma (atama DateTime.MinValue
değeri yoktur):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
DateModified
Alanı ikinci olarak işaretleyerek ikinci noktamı başarabilirsiniz nullable
. Şimdi bunun için bir null
değer yoksa şu şekilde ayarlayabilirsiniz :
public DateTime? DateModified { get; set; }
ADO.NET
Veritabanından veri almak için kullanıldığında , yukarıda yapıldığı yöntemden biraz farklı görünecektir ( null
yerine 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 :)