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? ?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top