เมื่อคุณระบุอย่างชัดเจนCast<T>ชนิดตัวแปรช่วงคอมไพเลอร์แทรกเรียกไปยัง ดังนั้นสิ่งนี้:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
เทียบเท่ากับ:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
ซึ่งสามารถเขียนเป็น:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
ในกรณีนี้Castโทรถูกต้องเนื่องจากMatchCollectionการดำเนินการเท่านั้นICollectionและไม่IEnumerable IEnumerable<T>วิธีการขยาย LINQ to Objects เกือบทั้งหมดกำหนดเป้าหมายไว้ที่IEnumerable<T>ข้อยกเว้นที่น่าสังเกตของCastและOfTypeทั้งสองอย่างนี้ใช้ในการแปลงคอลเล็กชันที่พิมพ์ "อ่อนแอ" (เช่นMatchCollection) เป็นแบบทั่วไปIEnumerable<T>ซึ่งจะช่วยให้สามารถดำเนินการ LINQ เพิ่มเติมได้