77 votes

Que signifie "DateTime ?" en C# ?

Je suis en train de lire un livre sur .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? C'est-à-dire ?

0 votes

Duplicata possible de stackoverflow.com/questions/2690866/

139voto

Thomas Points 63635

Desde DateTime est un struct et non un class vous obtenez un DateTime objet et non 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 être null donc ce DateTime ne peut jamais être null parce que ce n'est pas une référence.

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

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

23voto

Daniel Auger Points 8459

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 des dates et des heures dont les valeurs vont de 12:00:00 minuit, le 1er janvier 0001 Anno Domini, ou A.D. (également connu sous le nom de Common Era, ou C.E.) à 11:59:59 P.M., le 31 décembre 9999 A.D. (C.E.).

DateTime? peut toutefois être nulle.

1 votes

"DateTime ?" est un sucre syntaxique en C# pour l'équivalent de "Nullable<DateTime>".

14voto

smink Points 39640

A ? 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 sous-jacent est un type de valeur qui peut également être affecté d'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 ? est syntaxiquement équivalent à Nullable<DateTime> .

10voto

Ted Elliott Points 1632

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

5voto

mattlant Points 9136

Il vous donne essentiellement un état supplémentaire pour les primitives. Il peut s'agir d'une valeur ou d'un null. Il peut être utile dans les situations où une valeur n'a pas besoin d'être assignée. Ainsi, plutôt que d'utiliser par exemple datetime.min ou max, vous pouvez l'assigner null pour représenter l'absence de valeur.

1 votes

"primitive" pas tout à fait la même chose que "struct" ; cette syntaxe est pour les structs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X