Que signifie "DateTime?" En C #?
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?
?
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.