Veľa som hľadal, ale nenašiel som riešenie. Ako sa vysporiadať s DateTime, ktorý by mal obsahovať neinicializovanú hodnotu (ekvivalent null)? Mám triedu, ktorá môže mať nastavenú alebo nenastavenú hodnotu vlastnosti DateTime. Rozmýšľal som nad inicializáciou držiteľa vlastnosti na DateTime.MinValue, čo by sa potom dalo jednoducho kontrolovať. Hádam je to celkom bežná otázka, ako to robíte?
V prípade bežných DateTimes, ak ich vôbec neinicializujete, budú zodpovedať DateTime.MinValue
, pretože ide o hodnotový typ a nie referenčný typ.
Môžete tiež použiť nulovateľný DateTime, napríklad takto:
DateTime? MyNullableDate;
Alebo dlhší tvar:
Nullable<DateTime> MyNullableDate;
A nakoniec je tu zabudovaný spôsob, ako sa odvolať na predvolené nastavenie akéhokoľvek typu. Pre referenčné typy to vráti null
, ale pre náš príklad DateTime to vráti to isté ako DateTime.MinValue
:
default(DateTime)
Ak používate .NET 2.0 (alebo novší), môžete použiť typ nullable:
DateTime? dt = null;
alebo
Nullable<DateTime> dt = null;
potom neskôr:
dt = new DateTime();
A hodnotu môžete skontrolovať pomocou:
if (dt.HasValue)
{
// Do something with dt.Value
}
Alebo ho môžete použiť takto:
DateTime dt2 = dt ?? DateTime.MinValue;
Viac informácií nájdete tu:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx