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
foreach
boucle, la collection sur laquelle vous effectuez une itération doit être implémentéeIEnumerable
ouIEnumerable<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éCurrent
et une méthode publiqueMoveNext
renvoyant 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émenteIEnumerable
ouIEnumerable<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é)?