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?
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
.
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
x
n'est pas nul, puis vérifiez y
sinon retournez null,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
this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();
Fondamentalement.