2010-10-05 9 views
6

Possible en double:
What is the “??” operator for?Quelle est l'utilisation de "??"

S'il vous plaît me expliquer ce qui est de l'utilisation "??" dans le code ci-dessous et ce qui est "??" utilisé pour.

if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today) 

{ e.Description = "La date de la commande ne doit pas être à l'avenir."; return false; }

le code ci-dessus est à http://nettiers.com/EntityLayer.ashx

Merci.

+3

'' ?? en tant que tel pourrait être difficile à rechercher, mais la recherche de La syntaxe "C#" ou "C#" vous amène rapidement aux réponses –

Répondre

9

(Ceci est un double, mais il est difficile de rechercher, donc je suis assez heureux de fournir plus une autre cible pour les recherches futures ...)

Il est le null-coalescing operator. Essentiellement, il évalue le premier opérande, et si le résultat est nul (soit une référence nulle, soit la valeur nulle pour un type de valeur Null), il évalue le second opérande. Le résultat est celui qui a été évalué en dernier, effectivement.

Notez que du fait de son associativité, vous pouvez écrire:

int? x = E1 ?? E2 ?? E3 ?? E4; 

si E1, E2, E3 et E4 sont toutes les expressions de type int? - il commence par E1 et de progrès jusqu'à ce qu'il trouve un non valeur nulle.

Le premier opérande doit être de type nullable, mais le second opérande peut être non nul, auquel cas le type d'expression global est non nul. Par exemple, supposons que E4 est une expression de type int (mais tout le reste est encore int? vous pouvez alors faire x non annulable:

int x = E1 ?? E2 ?? E3 ?? E4; 
+0

vraiment utile à savoir - cela fonctionne-t-il dans la plupart des langages de programmation? –

+0

@Thomas: Non, seulement C# pour autant que je sache. quelque chose de similaire, et d'autres langages ont un déférencement nul –

+0

@Thomas Clayson: Un opérateur de coalescence nulle existe essentiellement dans [C# et Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) à partir de la version 5.10 (La syntaxe de Perl est '//'). –