Ich lese gerade ein .Net-Buch und in einem der Codebeispiele gibt es eine Klassendefinition für dieses Feld:
private DateTime? startdate
Was macht DateTime?
bedeuten?
Da DateTime
ein struct
ist, kein class
, erhalten Sie ein DateTime
object , kein Referenz , wenn Sie ein Feld oder eine Variable dieses Typs deklarieren.
Und genau wie ein int
nicht null
sein kann, kann dieses DateTime
Objekt niemals null
sein, da es keine Referenz ist.
Das Hinzufügen des Fragezeichens macht es zu einem nullable type , was bedeutet, dass entweder es ist ein DateTime
Objekt, oder es ist null
.
DateTime?
ist syntaktischer Zucker für Nullable<DateTime>
, wobei Nullable
selbst ein struct
ist.
Es ist eine nullbare DateTime. ?
nach einem primitiven Typ/einer primitiven Struktur gibt an, dass es sich um die nullfähige Version handelt.
DateTime ist eine Struktur, die niemals null sein kann. Von MSDN :
Der Werttyp "DateTime" stellt Datums- und Uhrzeitangaben mit Werten dar, die von 12:00:00 Uhr, 1. Januar 0001, Anno Domini oder AD (auch als "Common Era" oder CE bezeichnet) bis 23:59:59 Uhr, 31. Dezember 9999, reichen AD (CE)
DateTime?
kann jedoch null sein.
Ein ? als Suffix für einen Werttyp ermöglicht Null-Zuweisungen, die andernfalls unmöglich wären.
http://msdn.Microsoft.com/en-us/library/b3h38hb0.aspx
Stellt ein Objekt dar, dessen zugrunde liegender Typ ein Werttyp ist, dem auch eine Nullreferenz zugewiesen werden kann.
Das bedeutet, dass Sie so etwas schreiben können:
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime? entspricht syntaktisch Nullable <DateTime> .
Es ist äquivalent zu Nullable <DateTime>. Sie können "?" zu jedem primitiven Typ oder Struktur.
es gibt Ihnen im Grunde einen zusätzlichen Zustand für Primitive. Es kann ein Wert sein oder es kann null sein. Dies kann in Situationen nützlich sein, in denen kein Wert zugewiesen werden muss. Anstatt beispielsweise "datetime.min" oder "max" zu verwenden, können Sie "null" zuweisen, um keinen Wert darzustellen.
Wie wir wissen, ist DateTime eine Struktur, was bedeutet, dass DateTime ein Wertetyp ist, sodass Sie ein DateTime-Objekt erhalten und keinen Verweis, da DateTime keine Klasse ist. Wenn Sie ein Feld oder eine Variable dieses Typs deklarieren, können Sie nicht mit null beginnen Akzeptiere keine Null. Ebenso wie ein int kann nicht null sein. Daher ist das DateTime-Objekt niemals null, da es keine Referenz ist.
Aber manchmal brauchen wir nullfähige Variablen oder Felder mit Wertetypen. In diesem Fall verwenden wir ein Fragezeichen, um sie zu nullfähigen Typen zu machen, damit sie null zulassen.
Zum Beispiel: -
Terminzeit? Datum = null;
int? intvalue = null;
Im obigen Code ist die Variable Datum ein Objekt von DateTime oder sie ist null. Gleiches gilt für intvalue.