A volte vedo domande su casi limite e altre stranezze su Stack Overflow a cui sono facilmente risposto Jon Skeet ed Eric Lippert, che dimostrano una profonda conoscenza della lingua e delle sue molte complessità, < a href="http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx"> come questo:
You might think that in order to use a
foreach
loop, the collection you are iterating over must implementIEnumerable
orIEnumerable<T>
. But as it turns out, that is not actually a requirement. What is required is that the type of the collection must have a public method calledGetEnumerator
, and that must return some type that has a public property getter calledCurrent
and a public methodMoveNext
that returns abool
. If the compiler can determine that all of those requirements are met then the code is generated to use those methods. Only if those requirements are not met do we check to see if the object implementsIEnumerable
orIEnumerable<T>
.
È una cosa interessante da sapere. Posso capire perché Eric lo sa; è nella squadra dei compilatori, quindi deve saperlo. Ma che dire di quelli che dimostrano una conoscenza così profonda che non sono addetti ai lavori?
Come fanno i comuni mortali (che non fanno parte del team di compilatori C #) a scoprire cose del genere?
In particolare, ci sono metodi che queste persone usano per sradicare sistematicamente tale conoscenza, esplorarla e interiorizzarla (farla propria)?