บางครั้งฉันเห็นคำถามเกี่ยวกับคดีขอบและความแปลกประหลาดอื่น ๆ ใน Stack Overflow ที่ตอบได้ง่ายจาก Jon Skeet และ Eric Lippert แสดงให้เห็นถึงความรู้อย่างลึกซึ้งเกี่ยวกับภาษาและความซับซ้อนมากมาย เช่นนี้:
คุณอาจจะคิดว่าในการที่จะใช้
foreach
ห่วงคอลเลกชันที่คุณกำลังทำซ้ำมากกว่านั้นจำเป็นต้องใช้หรือIEnumerable
IEnumerable<T>
แต่มันกลับกลายเป็นว่านั่นไม่ใช่ข้อกำหนดจริงๆ สิ่งที่จะต้องเป็นว่าประเภทของคอลเลกชันจะต้องมีวิธีการที่เรียกว่าประชาชนGetEnumerator
และที่จะต้องกลับบางชนิดที่มีความทะเยอทะยานทรัพย์สินของประชาชนที่เรียกว่าCurrent
และวิธีการที่ประชาชนที่ส่งกลับMoveNext
bool
หากคอมไพเลอร์สามารถพิจารณาได้ว่าข้อกำหนดทั้งหมดนั้นเป็นไปตามนั้นรหัสนั้นจะถูกสร้างขึ้นเพื่อใช้วิธีการเหล่านั้น เฉพาะในกรณีที่ความต้องการเหล่านั้นจะไม่พบเราจะตรวจสอบเพื่อดูว่าวัตถุที่นำไปปฏิบัติหรือIEnumerable
IEnumerable<T>
นั่นเป็นเรื่องที่ควรรู้ ฉันเข้าใจได้ว่าทำไม Eric ถึงรู้เรื่องนี้ เขาอยู่ในทีมคอมไพเลอร์ดังนั้นเขาต้องรู้ แต่สิ่งที่เกี่ยวกับผู้ที่แสดงให้เห็นถึงความรู้ลึก ๆ ที่ไม่ได้อยู่ภายใน
ปุถุชนเพียง (ที่ไม่ได้อยู่ในทีมคอมไพเลอร์ C #) หาข้อมูลเกี่ยวกับสิ่งนี้ได้อย่างไร
โดยเฉพาะมีวิธีการที่คนเหล่านี้ใช้เพื่อรูทความรู้ดังกล่าวสำรวจและทำให้เป็นระบบ (ทำให้เป็นของตัวเอง) หรือไม่