Ocasionalmente veo preguntas sobre casos de borde y otras rarezas en Stack Overflow que son contestadas fácilmente por gente como Jon Skeet y Eric Lippert, demostrando un profundo conocimiento del lenguaje y sus múltiples complejidades, < a href="http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx"> como este:
Podría pensar que para usar un bucle
foreach
, la colección la iteración sobre debe implementarIEnumerable
oIEnumerable<T>
. Pero como resulta, eso no es realmente un requisito. Que es requerido es que el tipo de colección debe tener un método público. se llamaGetEnumerator
, y eso debe devolver algún tipo que tenga un público el captador de propiedades se llamaCurrent
y un método públicoMoveNext
que devuelve unbool
. Si el compilador puede determinar que todos esos se cumplen los requisitos y luego se genera el código para utilizar esos métodos. Solo si esos requisitos no se cumplen, verificamos si el el objeto implementaIEnumerable
oIEnumerable<T>
.
Eso es bueno saberlo. Puedo entender por qué Eric sabe esto; Él está en el equipo de compilación, por lo que tiene que saber. Pero ¿qué pasa con aquellos que demuestran un conocimiento tan profundo que no son expertos?
¿Cómo los simples mortales (que no están en el equipo del compilador de C #) se enteran de cosas como esta?
Específicamente, ¿existen métodos que usen estas personas para eliminar sistemáticamente ese conocimiento, explorarlo e interiorizarlo (hacer que sea suyo)?