Puis-je utiliser un opérateur conditionnel null au lieu d’un modèle d’événement classique?

C # 6.0 ajoute ce nouveau ?. opérateur qui permet maintenant d’invoquer des événements tels que:

 someEvent?.Invoke(sender, args); 

Maintenant, d’après ce que j’ai lu, cet opérateur garantit que someEvent est évalué une fois. Est-il correct d’utiliser ce type d’invocation au lieu du modèle classique:

 var copy = someEvent if(copy != null) copy(sender, args) 

Je suis au courant de certains scénarios dans lesquels la version ci-dessus du modèle nécessiterait des verrous supplémentaires, mais supposons le cas le plus simple.

Oui

Voir Opérateurs NULL-conditionnels sur MSDN .

Il y a un exemple couvrant ce que vous demandez

Sans l’opérateur conditionnel nul

 var handler = this.PropertyChanged; if (handler != null) handler(…) 

Avec l’opérateur conditionnel nul

 PropertyChanged?.Invoke(e) 

La nouvelle méthode est sécurisée pour les threads car le compilateur génère du code pour évaluer PropertyChanged une seule fois, en conservant le résultat dans une variable temporaire.