web-dev-qa-db-fra.com

Que signifie x? .Y? .Z?

Le projet de spécification pour Pattern Matching in 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, qu'est-ce que x?.y?.z signifier?

68
tkocmathla

Sachez que cette fonctionnalité de langue n'est disponible qu'en C # 6 et versions ultérieures.

C'est en fait l'équivalent de:

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

En d'autres termes, c'est une manière "sûre" de faire x.y.z, où l'une des propriétés en cours de route peut être nulle.

L'opérateur opérateur de coalescence nul (??) est également lié, ce qui fournit des valeurs à remplacer par null.

98
StriplingWarrior

C'est opérateur de propagation nul/opérateur de condition nul?. une nouvelle fonctionnalité proposée dans C # 6.0

x?.y?.z veux dire

  • vérifiez d'abord si x n'est pas nul, puis vérifiez y sinon retournez null,
  • deuxièmement, lorsque x n'est pas nul, vérifiez y, s'il n'est pas nul, retournez z sinon retournez null.

La valeur de retour ultime sera z ou null.

Sans cet opérateur si x est nul, alors accéder à x.y déclencherait une exception de référence Null, l'opérateur Null-Conditionnel permet d'éviter de rechercher explicitement null.

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

Voir: Obtenir une idée des fonctionnalités linguistiques à venir en C #

8 - Opérateurs nullement conditionnels

Parfois, le code a tendance à se noyer un peu lors de la vérification des valeurs nulles. L'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 sinon:

int? length = customers?.Length; // null if customers is null
29
Habib
 this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();

Fondamentalement.

2
Phil