De vez en cuando veo preguntas sobre casos extremos y otras rarezas en Stack Overflow que son respondidas fácilmente por personas como Jon Skeet y Eric Lippert, lo que demuestra un profundo conocimiento del lenguaje y sus muchas complejidades, como esta:
Puede pensar que para usar un
foreach
bucle, la colección sobre la que está iterando debe implementarIEnumerable
oIEnumerable<T>
. Pero resulta que eso no es realmente un requisito. Lo que se requiere es que el tipo de la colección debe tener un método público llamadoGetEnumerator
, y que debe devolver algún tipo que tenga un getter de propiedad pública llamadoCurrent
y un método públicoMoveNext
que devuelva abool
. Si el compilador puede determinar que se cumplen todos esos requisitos, el código se genera para usar esos métodos. Solo si no se cumplen esos requisitos, verificamos si el objeto se implementaIEnumerable
o noIEnumerable<T>
.
Eso es algo genial para saber. Puedo entender por qué Eric sabe esto; él está en el equipo compilador, así que tiene que saberlo. ¿Pero qué pasa con aquellos que demuestran un conocimiento tan profundo que no son expertos?
¿Cómo se enteran los simples mortales (que no están en el equipo del compilador de C #) sobre cosas como esta?
Específicamente, ¿existen métodos que estas personas usen para erradicar sistemáticamente dicho conocimiento, explorarlo e internalizarlo (hacerlo propio)?