Pourquoi cette dissortingbution est-elle redondante?

J’ai une méthode avec les surcharges suivantes:

ssortingng Call(ssortingng function, Dictionary parameters, object body) ssortingng Call(ssortingng function, Dictionary parameters, JObject body) 

Maintenant, j’ai ajouté une autre surcharge:

 ssortingng Call(ssortingng function) { return Call(function, null, (JObject) null); } 

J’ai ajouté une dissortingbution à JObject pour que le compilateur sache quelle surcharge utiliser. Mais Visual Studio me dit que le casting est redondant. Mais pourquoi mon appel n’est-il pas ambigu sans la dissortingbution?

Mais pourquoi mon appel n’est-il pas ambigu sans la dissortingbution?

Parce que la surcharge avec le paramètre JObject est “meilleure” que la surcharge avec le paramètre object … car la conversion de null en JObject est “meilleure” que la conversion de null en object .

JObject est plus spécifique que object , car il y a une conversion implicite de JObject en object , mais pas l’inverse.

Si le paramètre final de la première méthode était plutôt une ssortingng (par exemple), aucune des deux surcharges ne serait meilleure que l’autre, et l’appel serait ambigu sans la conversion.

Voir la section 7.5.3 de la spécification C # 5 pour tous les détails complexes. En particulier, la section 7.5.3.5 (“Meilleure cible de conversion”) est pertinente ici.