Po określeniu jawnego typu zmiennej zakresu kompilator wstawia wywołanie Cast<T>. Więc to:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
jest dokładnie równoważne z:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
który można również zapisać jako:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
W tym przypadku Castwywołanie jest wymagane, ponieważ MatchCollectiontylko implementuje, ICollectiona IEnumerablenie IEnumerable<T>. Prawie wszystkie metody rozszerzenia LINQ to Objects są przeznaczone dla IEnumerable<T>, z godnymi uwagi wyjątkami Casti OfType, z których oba są używane do konwertowania kolekcji typu „słabo” (na przykład MatchCollection) na typ ogólny IEnumerable<T>- co następnie umożliwia dalsze operacje LINQ.