2017-08-17 7 views
0

Appreciate il y a eu une question à ce que je vous demande, mais pas tout à fait comme ici. J'ai vérifié le? opérateur et je suis tombé sur le scénario suivant. La situation est la suivante:une propriété annulable après un contrôle nul-condition d'objet parent

internal class Dog 
{ 
    public int? Age { get; set; } 
} 

contrôles dans le code principal sont les suivantes:

Dog d2 = new Dog() { Age = 10 }; 
int age1 = d2.Age.Value; // compiles okay 
int age2 = d2?.Age.Value; // CS0266 

Je voudrais savoir pourquoi la ligne de code avec âge3 demande un casting explicite. d2.Age étant de type int? et Age.Value étant de type int ne varie pas entre les deux utilisations.

Répondre

2

Une fois que vous utilisez l'opérateur null-condicional, la valeur résultante peut être null. c'est pourquoi il ne peut jamais être int.

Qu'est-ce que vous avez besoin est:

int age2 = (d2?.Age).Value; 
+1

Vous voulez dire null conditionnelle? Je n'ai pas utilisé ?? dans les lignes de code. Cela dit, l'erreur du compilateur disparaît lorsque j'utilise d2? .Age avec des crochets. – MuKa

+0

Vous avez raison. C'est l'opérateur null-conditionnel. –

+0

Ce n'est pas une erreur de compilation. C'est une erreur de codage signalée par le compilateur. –