Question

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

Que signifie DateTime? ?

Était-ce utile?

La solution

Etant donné que DateTime est une structure et non une classe , vous obtenez un DateTime objet , 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 soit un objet DateTime , ou il s'agit de < code> null .

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

Autres conseils

C'est un DateTime nullable. ? après un type / structure primitif 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 de Common Era ou CE), jusqu'à 23:59:59, Décembre. 31, 9999 après JC (CE)

DateTime? peut cependant être nul.

Un ? suffixe pour un type de valeur autorise des assignations nulles qui seraient autrement impossibles.

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

  

Représente un objet dont le sous-jacent   type est un type de valeur qui peut aussi être   attribué une référence nulle.

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? correspond synstiquement à Nullable < DateTime > .

Cela équivaut à Nullable < DateTime > ;. Vous pouvez ajouter "? & Quot; à n'importe quel type primitif ou struct.

il vous donne fondamentalement un état supplémentaire pour les primitives. Ce peut être une valeur ou il peut être nul. Cela peut être utile dans les situations où il n'est pas nécessaire d'attribuer une valeur. Ainsi, plutôt que d'utiliser par exemple datetime.min ou max, vous pouvez lui attribuer la valeur null pour ne représenter aucune valeur.

Comme nous le savons, DateTime est une structure signifie que DateTime est un type de valeur. Vous obtenez donc un objet DateTime, et non 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 initialer la valeur null. Parce que les types de valeur n'acceptent pas null. De la même manière qu'un int ne peut pas être nul. afin que l'objet DateTime ne soit jamais nul, car ce n'est pas une référence.

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

Par exemple: -

DateTime? date = null;

int? intvalue = null;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top