68 votes

Que signifie x ?.y ?.z ?

Le projet de spécification pour Correspondance de motifs en C# contient l'exemple de code suivant :

Type? v = x?.y?.z; 
if (v.HasValue) {
    var value = v.GetValueOrDefault();     
    // code using value 
} 

Je comprends que Type? indique que Type est nullable, mais en supposant que x , y et z sont des locaux, que fait x?.y?.z C'est-à-dire ?

97voto

StriplingWarrior Points 56276

Veuillez noter que cette fonctionnalité linguistique n'est pas disponible actuellement. Il s'agit d'une fonctionnalité proposée qui devrait être ajoutée avec C# 6.

C'est effectivement l'équivalent de :

x == null ? null
   : x.y == null ? null
   : x.y.z

En d'autres termes, c'est une façon "sûre" de faire x.y.z où n'importe quelle propriété le long du chemin pourrait être nulle.

Il s'agit également de la opérateur de coalescence nul ( ??) qui fournit des valeurs à substituer à null .

29voto

Habib Points 93087

Il est Opérateur à propagation nulle / Opérateur à condition nulle ? une nouvelle fonctionnalité proposée dans C# 6.0

x?.y?.z signifie

  • Tout d'abord, vérifiez si x n'est pas nulle, alors vérifier y sinon, retournez null,
  • ensuite, si x n'est pas nul, vérifier y si elle n'est pas nulle, elle retourne z sinon, retournez null.

La valeur de retour finale sera z ou null .

Sans cet opérateur, si x est nulle, alors l'accès à x.y entraînerait une exception de référence nulle, l'opérateur Null-Conditional permet d'éviter de vérifier explicitement la présence de null.

C'est un moyen d'éviter l'exception de référence nulle.

Voir : Se faire une idée des prochaines fonctionnalités du langage C#

8 - Opérateurs conditionnels nuls

Parfois, le code a tendance à se noyer un peu dans le contrôle des nullités. Le site opérateur conditionnel nul vous permet d'accéder aux membres et aux éléments uniquement lorsque le récepteur n'est pas nul, fournissant un résultat nul dans le cas contraire :

int? length = customers?.Length; // null if customers is null

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