it-swarm.com.de

Was bedeutet "DateTime?" in C # bedeuten?

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?

67
Alvin S

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.

129
Thomas

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.

23
Daniel Auger

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

13
Jorge Ferreira

Es ist äquivalent zu Nullable <DateTime>. Sie können "?" zu jedem primitiven Typ oder Struktur.

10
Ted Elliott

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.

5
mattlant

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.

1
Sonu Rajpoot