web-dev-qa-db-fra.com

Qu'est-ce que "DateTime?" dire en C #?

Je lis un livre .Net, et dans l'un des exemples de code, il y a une définition de classe avec ce champ:

private DateTime? startdate

Qu'est-ce que DateTime? signifier?

67
Alvin S

Puisque DateTime est un struct, pas un class, vous obtenez un objet DateTime, pas une référence , lorsque vous déclarez un champ ou une variable de ce type.

Et, de la même manière qu'un int ne peut pas être null, cet objet DateTime ne peut jamais être null, car ce n'est pas une référence.

L'ajout du point d'interrogation le transforme en type nullable , ce qui signifie que soit c'est un objet DateTime, ou c'est null.

DateTime? est du sucre syntaxique pour Nullable<DateTime>, où Nullable est lui-même un struct.

129
Thomas

C'est un DateTime nullable. ? après un type/une structure primitive indique qu'il s'agit de la version nullable.

DateTime est une structure qui ne peut jamais être nulle. De MSDN :

Le type de valeur DateTime représente les dates et les heures avec des valeurs allant de 12:00:00 à minuit, le 1er janvier 0001 Anno Domini ou AD (également connu sous le nom d'ère commune ou CE) jusqu'à 23:59:59 PM, le 31 décembre 9999 AD (CE)

DateTime? peut cependant être nul.

23
Daniel Auger

Un ? comme suffixe pour un type de valeur permet des affectations nulles qui seraient autrement impossibles.

http://msdn.Microsoft.com/en-us/library/b3h38hb0.aspx

Représente un objet dont le type sous-jacent est un type de valeur auquel une référence nulle peut également être affectée.

Cela signifie que vous pouvez écrire quelque chose comme ceci:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

DateTime? est synaptiquement équivalent à Nullable <DateTime> .

13
Jorge Ferreira

C'est équivalent à Nullable <DateTime>. Vous pouvez ajouter "?" à tout type ou structure primitive.

10
Ted Elliott

il vous donne essentiellement un état supplémentaire pour les primitives. Il peut s'agir d'une valeur ou d'une valeur nulle. Il peut être utile dans les situations où aucune valeur n'a besoin d'être affectée. Ainsi, plutôt que d'utiliser par exemple datetime.min ou max, vous pouvez lui affecter null pour ne représenter aucune valeur.

5
mattlant

Comme nous le savons, DateTime est une structure signifie que DateTime est un type de valeur, vous obtenez donc un objet DateTime, pas une référence car DateTime n'est pas une classe, lorsque vous déclarez un champ ou une variable de ce type, vous ne pouvez pas initialiser avec null car les types de valeur n'accepte pas null. De la même manière qu'un int ne peut pas être nul. donc l'objet DateTime ne sera jamais nul, car ce n'est pas une référence.

Mais parfois, nous avons besoin d'une variable ou d'un champ de types de valeur nullable, cette fois-ci, nous utilisons le point d'interrogation pour les rendre de type nullable afin qu'ils autorisent null.

Par exemple: -

DateTime? date = null;

int? intvalue = null;

Dans le code ci-dessus, la variable date est un objet de DateTime ou elle est nulle. Idem pour intvalue.

1
Sonu Rajpoot