Saat Anda menentukan tipe variabel rentang eksplisit , kompilator menyisipkan panggilan ke Cast<T>
. Jadi ini:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
persis sama dengan:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
yang juga bisa ditulis sebagai:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
Dalam hal ini Cast
panggilan diperlukan karena MatchCollection
hanya mengimplementasikan ICollection
dan IEnumerable
, tidak IEnumerable<T>
. Hampir semua metode ekstensi LINQ ke Objek ditargetkan IEnumerable<T>
, dengan pengecualian penting dari Cast
dan OfType
, keduanya digunakan untuk mengubah kumpulan yang diketik "lemah" (seperti MatchCollection
) menjadi generik IEnumerable<T>
- yang kemudian memungkinkan untuk operasi LINQ lebih lanjut.