L'opérateur conditionnel nul peut être utilisé pour ignorer les appels de méthode sur une cible nulle. Les arguments de méthode seraient-ils évalués ou non dans ce cas?Lorsque l'opérateur conditionnel nul court-circuite, évalue-t-il encore les arguments de la méthode?
Par exemple:
myObject?.DoSomething(GetFromNetwork());
est-GetFromNetwork
appelé quand myObject
est null
?
Ils ne sont pas équivalents. Spécifiquement, le premier n'évalue 'object' qu'une seule fois, le second deux fois s'il n'est pas' null'. Comme ils ne sont pas équivalents, aucune conclusion ne devrait en être tirée. – hvd
@hvd Ils sont. Il est indiqué comme ceci même dans les spécifications (* littéralement! *). Et puisque c'est une variable, il n'y a pas de double évaluation. https://github.com/ljw1004/csharpspec/blob/gh-pages/expressions.md#member-access – Adrian
Ils ne sont pas en général, comme indiqué dans les spécifications que vous liez à: "sauf que P est évalué une seule fois . ", plus tard" sauf que P est évalué une seule fois. ", mais plus tard" sauf que P est évalué une seule fois. ", enfin" Sauf que ab et ab [0] ne sont évalués qu'une seule fois. " et "sauf que a.b et a.b [0] sont évalués une seule fois." Oui, pour une variable locale, la double évaluation ne change pas les résultats. La partie que c'est l'exception * seulement * serait un bon ajout à votre réponse, OMI. – hvd