Was bedeutet "DateTime"? meine in C #?

Antworten:

134

Da DateTimea struct, nicht a ist class, erhalten Sie ein DateTime Objekt , 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.

Thomas
quelle
23

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)

DateTime? kann jedoch null sein.

Daniel Auger
quelle
1
"Terminzeit?" ist syntaktischer Zucker in C # für das äquivalente "Nullable <DateTime>".
Pete Stensønes
14

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

Stellt ein Objekt dar, dessen zugrunde liegender Typ ein Werttyp ist, dem auch eine Nullreferenz zugewiesen werden kann.

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

Jorge Ferreira
quelle
10

Dies entspricht Nullable <DateTime>. Sie können "?" zu jedem primitiven Typ oder Struktur.

Ted Elliott
quelle
5

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.

mattlant
quelle
1
"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.

Sonu Rajpoot
quelle
0
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!

Parikshit
quelle