Ce n' “DateTime?” signifie en C#?
Je lis .Net livre, et dans un des exemples de code il y a une définition de classe avec ce domaine:
private DateTime? startdate
Ce n' DateTime?
veux dire?
- Double Possible de stackoverflow.com/questions/2690866/...
Vous devez vous connecter pour publier un commentaire.
Depuis
DateTime
est unstruct
, pas unclass
, vous obtenez unDateTime
objet, pas un 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 êtrenull
, de sorte que cetteDateTime
objet ne peut jamais êtrenull
, parce que c'est pas une référence.Ajoutant le point d'interrogation se transforme en une type nullable, ce qui signifie que soit c'est un
DateTime
objet, ou il estnull
.DateTime?
est sucre syntaxique pourNullable<DateTime>
, oùNullable
est lui-même unstruct
.C'est nullable DateTime.
?
après un type primitif ou de la structure indique que c'est l'nullable version.DateTime est une structure qui ne peut jamais être nulle. De MSDN:
DateTime?
peut être null cependant.Un ? comme suffixe pour un type de valeur permet à la nullité des assignations qui serait othwerwise impossible.
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
Cela signifie que vous pouvez écrire quelque chose comme ceci:
DateTime? est syntatically équivalent à Nullable<DateTime>.
Il est équivalent à prendre la valeur null< DateTime>. Vous pouvez ajouter des "?" à n'importe quel type primitif ou struct.
il vous donne essentiellement un supplémentaire de l'état pour les primitives. Il peut être une valeur, ou il peut être null. Il peut être utile dans les situations où une valeur n'a pas besoin d'être attribué. Ainsi, plutôt que d'utiliser par exemple, datetime.min ou max, vous pouvez l'affecter la valeur null pour indiquer l'absence de valeur.
Comme nous le savons, DateTime est une struct signifie DateTime est un type de valeur, de sorte que vous obtenez 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 initial avec la valeur null, Car les types de valeur n'accepte pas la valeur null. De la même manière qu'un entier ne peut pas être null. si l'objet DateTime jamais être nulle, parce que c'est pas une référence.
Mais parfois nous avons besoin de nullable variable ou un champ de types de valeur, que le temps nous utilisez un point d'interrogation pour faire leur type nullable de sorte qu'ils permettent null.
Par Exemple:-
DateTime? date = null;
int? intvalue = null;
Dans le code ci-dessus, la variable date est un objet de type DateTime ou il est nul. De même pour intvalue.