Khi bạn chỉ định một loại biến phạm vi rõ ràng , trình biên dịch sẽ chèn một lệnh gọi tới Cast<T>. Vì vậy, điều này:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
chính xác tương đương với:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
cũng có thể được viết là:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
Trong trường hợp này, Castlệnh gọi là bắt buộc vì MatchCollectionchỉ thực hiện ICollectionvà IEnumerablekhông IEnumerable<T>. Hầu hết tất cả các phương thức mở rộng LINQ to Object đều được nhắm mục tiêu IEnumerable<T>, với các ngoại lệ đáng chú ý là Castvà OfType, cả hai đều được sử dụng để chuyển đổi một tập hợp được đánh máy "yếu" (chẳng hạn như MatchCollection) thành một tập hợp chung IEnumerable<T>- sau đó cho phép các hoạt động LINQ tiếp theo.