Ocasionalmente, vejo perguntas sobre casos extremos e outras estranhezas no Stack Overflow que são facilmente respondidas por nomes como Jon Skeet e Eric Lippert, demonstrando um profundo conhecimento da linguagem e seus muitos meandros, como este:
Você pode pensar que, para usar um
foreachloop, a coleção sobre a qual você está iterando deve implementarIEnumerableouIEnumerable<T>. Mas, como se vê, isso não é realmente um requisito. O que é necessário é que o tipo da coleção tenha um método público chamadoGetEnumeratore que retorne algum tipo que tenha um getter de propriedade pública chamadoCurrente um método públicoMoveNextque retorne abool. Se o compilador puder determinar que todos esses requisitos sejam atendidos, o código será gerado para usar esses métodos. Somente se esses requisitos não forem atendidos, verificamos se o objeto implementaIEnumerableouIEnumerable<T>.
Isso é legal de se saber. Eu posso entender por que Eric sabe disso; ele está na equipe do compilador, então ele tem que saber. Mas e aqueles que demonstram um conhecimento tão profundo que não são privilegiados?
Como meros mortais (que não fazem parte da equipe do compilador C #) descobrem coisas como essa?
Especificamente, existem métodos que essas pessoas usam para erradicar sistematicamente esse conhecimento, explorá-lo e internalizá-lo (torná-lo seu)?