Lorsque vous spécifiez un explicite gamme de type de variable, le compilateur insère un appel à l' Cast<T>
. Donc ceci:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
est exactement équivalente à:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
qui peut aussi être écrit comme:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
Dans ce cas, l' Cast
appel est nécessaire, car MatchCollection
n'implémente ICollection
et IEnumerable
, pas IEnumerable<T>
. Presque tous les LINQ to Objects méthodes d'extension sont ciblées en IEnumerable<T>
, à l'exception notable d' Cast
et OfType
, qui sont tous deux utilisés pour convertir un "faiblement" tapé collection (comme MatchCollection
) dans un générique IEnumerable<T>
- ce qui permet alors pour plus de LINQ opérations.