Cosa significa “DateTime?” In C #?

Sto leggendo un libro .Net, e in uno degli esempi di codice c’è una definizione di class con questo campo:

private DateTime? startdate 

Cosa fa DateTime? significare?

Poiché DateTime è una struct , non una class , si ottiene un object DateTime , non un riferimento , quando si dichiara un campo o una variabile di quel tipo. E, allo stesso modo in cui un int non può essere null , così questo object DateTime non può mai essere nullo, perché non è un riferimento.

Aggiungendo il punto interrogativo si trasforma in un tipo nullable , il che significa che sia un object DateTime , o è null .

DateTime? è lo zucchero sintattico per Nullable , dove Nullable è esso stesso una struct .

È un valore DateTime nullable. ? dopo un tipo / struttura primitivo indica che è la versione nullable.

DateTime è una struttura che non può mai essere nulla. Da MSDN :

Il tipo di valore DateTime rappresenta le date e le ore con valori che vanno dalle 12:00:00 mezzanotte, 1 gennaio, 0001 Anno Domini o AD (noto anche come Era Comune o CE) fino alle 23:59:59 del 31 dicembre 9999 AD (CE)

DateTime? può essere nullo comunque.

A ? come suffisso per un tipo di valore consente assegnazioni nulle che sarebbero altrimenti impossibili.

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

Rappresenta un object il cui tipo sottostante è un tipo di valore a cui può essere assegnato anche un riferimento null.

Questo significa che puoi scrivere qualcosa come questo:

  DateTime? a = null; if (!a.HasValue) { a = DateTime.Now; if (a.HasValue) { Console.WriteLine(a.Value); } } 

Appuntamento? è sinteticamente equivalente a Nullable .

È equivalente a Nullable . È ansible aggiungere “?” a qualsiasi tipo o struttura primitiva.

fondamentalmente ti dà uno stato extra per i primitivi. Può essere un valore o può essere nullo. Può essere utile in situazioni in cui non è necessario assegnare un valore. Quindi, piuttosto che utilizzare, ad esempio, datetime.min o max, è ansible assegnarlo null per non rappresentare alcun valore.

Come sappiamo, DateTime è una struct significa che DateTime è un tipo di valore, quindi ottieni un object DateTime, non un riferimento perché DateTime non è una class, quando dichiari un campo o una variabile di quel tipo non puoi inizializzare con null Perché tipi di valore non accettare null. Allo stesso modo di un int non può essere nullo. quindi l’object DateTime non è mai nullo, perché non è un riferimento.

Ma a volte abbiamo bisogno di variabili nullable o di campi di valori, quella volta usiamo il punto interrogativo per renderli di tipo nullable in modo da consentire il null.

Per esempio:-

Appuntamento? date = null;

int? intvalue = null;

Nel codice precedente, data variabile è un object di DateTime o è null. Lo stesso per l’intvalore.