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, Cast
lệnh gọi là bắt buộc vì MatchCollection
chỉ thực hiện ICollection
và IEnumerable
khô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à Cast
và 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.