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.