J'utilise souvent un opérateur de propagation nul dans mon code car il me donne un code plus lisible, en particulier dans les requêtes longues, je n'ai pas à vérifier la valeur nulle de chaque classe utilisée.
Le code suivant lève une erreur de compilation selon laquelle nous ne pouvons pas utiliser l'opérateur de propagation nul dans lambda.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
L'erreur :
Erreur CS8072 Une arborescence d'expression lambda ne peut pas contenir d'opérateur de propagation nul.
C # pourrait facilement traduire le code ci-dessus en code en code suivant s'il ne peut vraiment rien faire d'autre!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Je suis curieux de savoir pourquoi C # ne fait rien et lève simplement une erreur de compilation?
Foo?.Bar
n'est pas équivalent àFoo != null ? Foo.Bar : null
carFoo
est évalué une fois avec l'opérateur de propagation nul et deux fois avec le conditionnel, de sorte que la traduction ne serait pas correcte dans tous les cas.