De temps en temps, je vois des questions sur les cas extrêmes et d'autres problèmes étranges liés à Stack Overflow auxquelles Jon Skeet et Eric Lippert répondent facilement, démontrant ainsi une connaissance approfondie de la langue et de ses nombreuses subtilités, comme celle-ci:
Vous pourriez penser que pour utiliser une
foreachboucle, la collection sur laquelle vous effectuez une itération doit être implémentéeIEnumerableouIEnumerable<T>. Mais il s'avère que ce n'est pas une exigence. Ce qui est requis, c’est que le type de la collection ait une méthode publique appeléeGetEnumerator, qui doit renvoyer un type comportant un getter de propriété publique appeléCurrentet une méthode publiqueMoveNextrenvoyant abool. Si le compilateur peut déterminer que toutes ces exigences sont remplies, le code est généré pour utiliser ces méthodes. Nous ne vérifions si l'objet implémenteIEnumerableouIEnumerable<T>.
C'est cool de savoir. Je peux comprendre pourquoi Eric le sait. il fait partie de l'équipe de compilation, il doit donc savoir. Mais qu'en est-il de ceux qui démontrent une connaissance aussi profonde qui ne sont pas des initiés?
Comment les simples mortels (qui ne font pas partie de l'équipe du compilateur C #) découvrent-ils de telles choses?
Plus précisément, existe-t-il des méthodes que ces personnes utilisent pour extraire systématiquement cette connaissance, l'explorer et l'intérioriser (en faire sa propre propriété)?