Cosa significa & # 8220; DateTime? & # 8221; intendi in C #?
Domanda
Sto leggendo un libro .Net e in uno degli esempi di codice c'è una definizione di classe con questo campo:
private DateTime? startdate
Cosa significa DateTime?
?
Soluzione
Poiché DateTime
è un struct
, non una class
, si ottiene un DateTime
oggetto , non un riferimento , quando dichiari un campo o una variabile di quel tipo.
E, allo stesso modo in cui un int
non può essere null
, quindi questo oggetto DateTime
non può mai essere null , perché non è un riferimento.
L'aggiunta del punto interrogativo lo trasforma in tipo nullable , il che significa che o è un oggetto DateTime
, o è < code> nullo .
DateTime?
è lo zucchero sintattico per Nullable < DateTime >
, dove Nullable
è esso stesso un struct
.
Altri suggerimenti
È un DateTime nullable. ?
dopo un tipo / struttura primitiva indica che si tratta della 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 di mezzanotte, 1 gennaio 0001 Anno Domini o AD (noto anche come Era comune o CE) fino alle 23:59:59, dicembre 31, 9999 d.C. (CE)
DateTime?
può essere nullo comunque.
Un ? 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 oggetto il cui sottostante tipo è un tipo di valore che può anche essere assegnato un riferimento null.
Ciò significa che puoi scrivere qualcosa del genere:
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime? è sinteticamente equivalente a Nullable < DateTime > .
È equivalente a Nullable < DateTime > ;. Puoi aggiungere "? & Quot; a qualsiasi tipo o struttura primitiva.
ti dà fondamentalmente uno stato extra per le primitive. Può essere un valore o può essere nullo. Può essere utile in situazioni in cui non è necessario assegnare un valore. Quindi, anziché utilizzare ad esempio datetime.min o max, puoi assegnarlo null per non rappresentare alcun valore.
Come sappiamo, DateTime è uno struct significa che DateTime è un tipo di valore, quindi ottieni un oggetto DateTime, non un riferimento perché DateTime non è una classe, quando dichiari un campo o una variabile di quel tipo che non puoi inizializzare con null Perché i tipi di valore non accettano null. Allo stesso modo di un int non può essere nullo. quindi l'oggetto DateTime non sarà mai nullo, perché non è un riferimento.
Ma a volte abbiamo bisogno di una variabile nullable o di un campo di tipi di valore, quella volta usiamo il punto interrogativo per renderli di tipo nullable in modo che consentano null.
Ad esempio: -
DateTime? data = null;
int? intvalue = null;
Nel codice sopra, la variabile data è un oggetto di DateTime o è null. Lo stesso vale per intvalue.