Using LINQ extension method syntax on a MatchCollection
using System.Linq;
matches.Cast<Match>().Any(x => x.Groups["name"].Value.Length > 128)
You just need to convert it from an IEnumerable
to an IEnumerable<Match>
(IEnumerable<T>) to get access to the LINQ extension provided on IEnumerable<T>.
When you specify an explicit range variable type, the compiler inserts a call to Cast<T>
. So this:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
is exactly equivalent to:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
which can also be written as:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
In this case the Cast
call is required because MatchCollection
only implements ICollection
and IEnumerable
, not IEnumerable<T>
. Almost all the LINQ to Objects extension methods are targeted at IEnumerable<T>
, with the notable exceptions of Cast
and OfType
, both of which are used to convert a "weakly" typed collection (such as MatchCollection
) into a generic IEnumerable<T>
- which then allows for further LINQ operations.