Kadang-kadang saya melihat pertanyaan tentang kasus tepi dan keanehan lain di Stack Overflow yang mudah dijawab oleh orang-orang seperti Jon Skeet dan Eric Lippert, menunjukkan pengetahuan mendalam tentang bahasa dan banyak seluk beluknya, seperti ini:
Anda mungkin berpikir bahwa untuk menggunakan
foreach
loop, koleksi yang Anda iterasi harus diimplementasikanIEnumerable
atauIEnumerable<T>
. Tetapi ternyata, itu sebenarnya bukan keharusan. Yang diperlukan adalah bahwa jenis koleksi harus memiliki metode publik yang disebutGetEnumerator
, dan yang harus mengembalikan beberapa jenis yang memiliki pengambil properti publik yang disebutCurrent
dan metode publikMoveNext
yang mengembalikan abool
. Jika kompiler dapat menentukan bahwa semua persyaratan tersebut terpenuhi maka kode dihasilkan untuk menggunakan metode tersebut. Hanya jika persyaratan tersebut tidak terpenuhi kami memeriksa untuk melihat apakah objek mengimplementasikanIEnumerable
atauIEnumerable<T>
.
Itu hal yang keren untuk diketahui. Saya bisa mengerti mengapa Eric tahu ini; dia ada di tim penyusun, jadi dia harus tahu. Tetapi bagaimana dengan mereka yang menunjukkan pengetahuan yang begitu dalam yang bukan orang dalam?
Bagaimana orang biasa (yang bukan anggota tim C #) mengetahui tentang hal-hal seperti ini?
Secara khusus, adakah metode yang digunakan orang-orang ini untuk secara sistematis membasmi pengetahuan seperti itu, menjelajahinya, dan menginternalisasikannya (menjadikannya milik mereka)?