Da DateTimea struct, nicht a ist class, erhalten Sie ein DateTimeObjekt , keine Referenz , wenn Sie ein Feld oder eine Variable dieses Typs deklarieren.
Und genau wie ein intkann nicht sein null, so kann dieses DateTimeObjekt niemals sein null, weil es keine Referenz ist.
Durch Hinzufügen des Fragezeichens wird es zu einem nullbaren Typ , was bedeutet, dass es entweder ein DateTimeObjekt ist oder es ist null.
DateTime?ist syntaktischer Zucker für Nullable<DateTime>, wo Nullableist selbst ein struct.
Es ist eine nullbare DateTime. ?Nach einem primitiven Typ / einer primitiven Struktur wird angezeigt, dass es sich um die nullfähige Version handelt.
DateTime ist eine Struktur, die niemals null sein kann. Von MSDN :
Der Werttyp DateTime repräsentiert Datums- und Uhrzeitangaben mit Werten zwischen 12:00:00 Uhr Mitternacht, 1. Januar 0001 Anno Domini oder AD (auch als Common Era oder CE bekannt) und 23:59:59 Uhr, 31. Dezember 9999 AD (CE)
Es gibt Ihnen im Grunde einen zusätzlichen Zustand für Grundelemente. 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 es null zuweisen, um keinen Wert darzustellen.
"primitiv" nicht ganz dasselbe wie "struct"; Diese Syntax ist für Strukturen
Marc Gravell
1
Wie wir wissen, ist DateTime eine Struktur, dh DateTime ist ein Werttyp. Sie erhalten also ein DateTime-Objekt, keine Referenz, da DateTime keine Klasse ist. Wenn Sie ein Feld oder eine Variable dieses Typs deklarieren, können Sie nicht mit null initialisieren, weil Werttypen akzeptiere nicht null. Genauso wie ein int nicht null sein kann. Daher ist das DateTime-Objekt niemals null, da es keine Referenz ist.
Aber manchmal brauchen wir eine nullbare Variable oder ein Feld von Werttypen. Dieses Mal verwenden wir ein Fragezeichen, um sie zum nullbaren Typ zu machen, damit sie null zulassen.
Zum Beispiel:-
Terminzeit? Datum = null;
int? intvalue = null;
Im obigen Code ist das variable Datum ein Objekt von DateTime oder es ist null. Gleiches gilt für intvalue.
publicclassReportsMapper : CommonMapper
{
public DateTime? cb_Bill_From_Date { get; set; }
public DateTime? cb_Bill_To_Date { get; set; }
public DateTime? tff_Bill_From_Date { get; set; }
public DateTime? tff_Bill_To_Date { get; set; }
}
Wenn Sie DateTime in der Prozedur als Null deklarieren, wird eine Fehlermeldung angezeigt, dass das DateTime-Objekt niemals Null sein kann. Sie müssen also hinzufügen? Nach DateTime heißt das, dass DateTime ebenfalls nullbar ist.
Antworten:
Da
DateTime
astruct
, nicht a istclass
, erhalten Sie einDateTime
Objekt , keine Referenz , wenn Sie ein Feld oder eine Variable dieses Typs deklarieren.Und genau wie ein
int
kann nicht seinnull
, so kann diesesDateTime
Objekt niemals seinnull
, weil es keine Referenz ist.Durch Hinzufügen des Fragezeichens wird es zu einem nullbaren Typ , was bedeutet, dass es entweder ein
DateTime
Objekt ist oder es istnull
.DateTime?
ist syntaktischer Zucker fürNullable<DateTime>
, woNullable
ist selbst einstruct
.quelle
Es ist eine nullbare DateTime.
?
Nach einem primitiven Typ / einer primitiven Struktur wird angezeigt, dass es sich um die nullfähige Version handelt.DateTime ist eine Struktur, die niemals null sein kann. Von MSDN :
DateTime?
kann jedoch null sein.quelle
A ? Als Suffix für einen Werttyp sind Nullzuweisungen zulässig, die andernfalls unmöglich wären.
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
Dies bedeutet, dass Sie so etwas schreiben können:
DateTime? a = null; if (!a.HasValue) { a = DateTime.Now; if (a.HasValue) { Console.WriteLine(a.Value); } }
Terminzeit? ist syntaktisch äquivalent zu Nullable <DateTime> .
quelle
Dies entspricht Nullable <DateTime>. Sie können "?" zu jedem primitiven Typ oder Struktur.
quelle
Es gibt Ihnen im Grunde einen zusätzlichen Zustand für Grundelemente. 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 es null zuweisen, um keinen Wert darzustellen.
quelle
Wie wir wissen, ist DateTime eine Struktur, dh DateTime ist ein Werttyp. Sie erhalten also ein DateTime-Objekt, keine Referenz, da DateTime keine Klasse ist. Wenn Sie ein Feld oder eine Variable dieses Typs deklarieren, können Sie nicht mit null initialisieren, weil Werttypen akzeptiere nicht null. Genauso wie ein int nicht null sein kann. Daher ist das DateTime-Objekt niemals null, da es keine Referenz ist.
Aber manchmal brauchen wir eine nullbare Variable oder ein Feld von Werttypen. Dieses Mal verwenden wir ein Fragezeichen, um sie zum nullbaren Typ zu machen, damit sie null zulassen.
Zum Beispiel:-
Terminzeit? Datum = null;
int? intvalue = null;
Im obigen Code ist das variable Datum ein Objekt von DateTime oder es ist null. Gleiches gilt für intvalue.
quelle
public class ReportsMapper : CommonMapper { public DateTime? cb_Bill_From_Date { get; set; } public DateTime? cb_Bill_To_Date { get; set; } public DateTime? tff_Bill_From_Date { get; set; } public DateTime? tff_Bill_To_Date { get; set; } }
Wenn Sie DateTime in der Prozedur als Null deklarieren, wird eine Fehlermeldung angezeigt, dass das DateTime-Objekt niemals Null sein kann. Sie müssen also hinzufügen? Nach DateTime heißt das, dass DateTime ebenfalls nullbar ist.
Ich hoffe das hilft!
quelle