[C#] Méthode d'extension et objet dynamique


Answers

Pour développer la réponse de Jon, la raison pour laquelle cela ne fonctionne pas est que les méthodes d'extension de code non dynamiques fonctionnent en effectuant une recherche complète de toutes les classes connues du compilateur pour une classe statique dont la méthode d'extension correspond. La recherche va dans l'ordre en fonction de l'imbrication de l'espace de noms et des directives d' using disponibles dans chaque espace de noms.

Cela signifie que pour obtenir une invocation de méthode d'extension dynamique résolue correctement, le DLR doit savoir au moment de l'exécution quelles sont les imbrications d'espaces de noms et les directives d' using dans votre code source . Nous n'avons pas de mécanisme pratique pour encoder toutes ces informations dans le site d'appel. Nous avons envisagé d'inventer un tel mécanisme, mais nous avons décidé que le coût était trop élevé et que le risque de planification était trop élevé pour en valoir la peine.

Question

Je vais résumer mon problème dans l'extrait de code suivant.

List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());

Au-dessus du code fonctionne bien.

Maintenant, j'ai essayé ce qui suit

dynamic dList = list;
 Console.WriteLine(dList.First());

mais je reçois RuntimeBinderException.Why est-ce vrai?




Links