Tengo el siguiente código:
MatchCollection matches = myRegEx.Matches(content);
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
¿Hay alguna forma de hacer esto usando la sintaxis del método de extensión LINQ?
Algo como esto:
bool result = matches.Any(x => ... );

using System.Linqcontrario, dará un error de sintaxisCastno es necesario desde C # 8.0, pero el código no se compilará en versiones de idiomas anteriores si no se proporciona.Cuando especifica un tipo de variable de rango explícito , el compilador inserta una llamada a
Cast<T>. Así que esto:es exactamente equivalente a:
que también se puede escribir como:
En este caso la
Castllamada es necesaria porqueMatchCollectionsolo implementaICollectionyIEnumerable, noIEnumerable<T>. Casi todos los métodos de extensión de LINQ to Objects están dirigidos aIEnumerable<T>, con las notables excepciones deCastyOfType, los cuales se utilizan para convertir una colección de tipo "débil" (comoMatchCollection) en una genéricaIEnumerable<T>, lo que permite realizar más operaciones LINQ.fuente
Prueba esto:
Para referencia, consulte
Enumerable.Cast:Básicamente es una forma de convertir un archivo
IEnumerableen unIEnumerable<T>.fuente
Creo que sería algo como esto:
fuente
MatchCollectionsolo se implementaIEnumerable. No está fuertemente tipado.Puedes probar algo como esto:
fuente
EDITAR:
Entonces debería poder llamar a este método de extensión para convertirlo en un IEnumerable:
fuente
MatchCollectionsolo se implementaIEnumerable. No está fuertemente tipado.