Sono d'accordo che Nullable < DateTime> è una scelta migliore in assenza di altre considerazioni.
È tuttavia necessario considerare altri sistemi con cui è necessario interoperare.
Ad esempio:
se si sta esponendo il tuo DateTime NET per client COM, non sarà in grado di utilizzare Nullable < DateTime>.
se si memorizza il valore in un database SQL Server, ricordare che SQL Server non può memorizzare DateTime.MinValue come DateTime.
altro punto da considerare è che Annullabile può aggiungere una certa complessità per chiamate di un API: possono essere necessario considerare come il caso nulla deve essere maneggiato. In alcuni casi è possibile che utilizzi un valore predefinito per il caso nullo. Ad esempio, considera una classe che espone una proprietà "ExpiryDate", in cui è necessario un valore per indicare che l'elemento non scade mai.
Un approccio consiste nell'utilizzare un Nullable<DateTime>
con un valore nullo che rappresenta "non scade mai". Un approccio alternativo consiste nell'usare un DateTime standard con DateTime.MaxValue
che rappresenta "non scade mai".
In questo esempio, il test per "'scaduta" è più semplice per il DateTime di serie:
if (item.ExpiryDate <= DateTime.Today) ...
che per il Nullable<DateTime>
:
if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...
O dovrebbe TimeLastAccessed dal set di TimeCreated quando l'oggetto è inizialmente creato – benPearce