DateTime "null" hodnota

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?

Riešenie

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 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)
Komentáre (5)

Ak používate .NET 2.0 (alebo novší), môžete použiť typ nullable:

DateTime? dt = null;

alebo

Nullable 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

Komentáre (6)

Zvážil by som použitie nullable types.

DateTime? myDate namiesto DateTime myDate.

Komentáre (0)