2010-11-23 13 views
36

Während in einem Open-Source-Projekt um zu spielen, mein Versuch, ToString ein Datetime-Objekt wurde vom Compiler vereitelt. Als ich auf die Definition sprang, sah ich dies:Was bedeutet ein Fragezeichen nach einer Variablendeklaration?

public DateTime? timestamp; 

Könnte jemand bitte erleuchte mich auf das, was das heißt und warum könnte es nützlich sein?

+3

+1 für Compiler-Vereitelung jetzt ein akzeptiertes Verb zu sein. – Joe

Antwort

53

Dies ist ein nullable type. Nullable-Typen ermöglichen value types (z. B. int s und Strukturen wie DateTime) Null enthalten. Die ? ist syntaktische Zucker für Nullable<DateTime>, da es so oft verwendet wird.

ToString() zu nennen:

if (timstamp.HasValue) {  // i.e. is not null 
    return timestamp.Value.ToString(); 
} 
else { 
    return "<unknown>"; // Or do whatever else that makes sense in your context 
} 
+0

Sie könnten '??' Operator anstelle von wenn/sonst nicht verwenden? –

+0

@ v.oddou: Ja, in diesem Beispiel, obwohl das resultierende Objekt ist ein Datetime, die wir als String formatiert werden sollen (und es ist nicht wirklich sinnvoll ist, eine Standard-Datum/Zeit zu haben, wenn es nicht einen in gespeichert ist die Nullable-Struktur). – Cameron

+1

@ v.oddou Idunno - das wäre schrecklich viel Fragezeichen-y syntaktischer Zucker für eine varibale, meinst du nicht? –

-1

es ist NULL festlegbare Datetime

5

Das ist eine Abkürzung für Nullable<DateTime> ist. Werttypen wie DateTime können nicht null sein; Nullable<> umschließt den Werttyp, sodass Sie ein Objekt mit einer HasValue Eigenschaft und anderen praktischen Funktionen haben.

8

? macht einen Werttyp (int, bool, DateTime oder andere struct oder enum) NULL festlegbaren über den System.Nullable<T> Typ. DateTime? bedeutet, dass die Variable System.Nullable<DateTime> ist. Sie können dieser Variablen einen DateTime oder den Wert null zuweisen. Um zu überprüfen, ob die Variable einen Wert hat, verwenden Sie die Eigenschaft HasValue, und um den tatsächlichen Wert zu erhalten, verwenden Sie die Eigenschaft Value.

Verwandte Themen