C #: Comment effectuer une vérification nulle sur un object dynamic

Comment puis-je effectuer une vérification nulle sur un object dynamic?

Pseudo code:

public void Main() { dynamic dynamicObject = 33; if(true) { // Arbitrary logic dynamicObject = null; } Method(dynamicObject); } public void Method(dynamic param) { // TODO: check if the content of 'param' is equal to null } 

Craignez-vous que l’object dynamic ait un opérateur d’égalité personnalisé qui modifiera la façon dont le null est interprété? Si c’est le cas, utilisez uniquement Object.ReferenceEquals

 if (Object.ReferenceEquals(null, param)) { ....... } 

Vous pouvez toujours créer le param de type object, c’est ce que fait le compilateur. Lorsque vous tapez un paramètre dynamic, cela signifie simplement que dans cette méthode, elle utilise uniquement un appel dynamic pour toutes les utilisations de param, mais à l’extérieur, il ne s’agit que d’une signature de type object. Une utilisation plus puissante de dynamicObject serait d’avoir des surcharges de la méthode que vous appelez. Ainsi, si vous conservez votre exemple et que vous ne disposez que de deux surcharges, il appellerait l’une des deux méthodes en fonction du type d’exécution, append plus pour plus de types.

 public void Main() { dynamic dynamicObject = 33; if(true) { // Arbitrary logic dynamicObject = null; } Method(dynamicObject); } public void Method(int param) { //don't have to check check null //only called if dynamicObject is an int } public void Method(object param) { // will be called if dynamicObject is not an int or null }