Utilisation de la syntaxe de la méthode d’extension Linq sur MatchCollection

J’ai le code suivant:

MatchCollection matches = myRegEx.Matches(content); bool result = (from Match m in matches where m.Groups["name"].Value.Length > 128 select m).Any(); 

Est-il possible de faire cela en utilisant la syntaxe de la méthode d’extension Linq? Quelque chose comme ça..

 bool result = matches.Any(x => ... ); 

 using System.Linq; matches.Cast().Any(x => x.Groups["name"].Value.Length > 128) 

Il vous suffit de le convertir d’un IEnumerable en un IEnumerable (IEnumerable) pour accéder à l’extension linq fournie sur IEnumerable.

Lorsque vous spécifiez un type de variable de plage explicite , le compilateur insère un appel à Cast . Donc ça:

 bool result = (from Match m in matches where m.Groups["name"].Value.Length > 128 select m).Any(); 

est exactement équivalent à:

 bool result = matches.Cast() .Where(m => m.Groups["name"].Value.Length > 128) .Any(); 

qui peut aussi être écrit comme:

 bool result = matches.Cast() .Any(m => m.Groups["name"].Value.Length > 128); 

Dans ce cas, l’appel Cast est requirejs car MatchCollection implémente uniquement ICollection et IEnumerable , pas IEnumerable . Presque toutes les méthodes d’extension LINQ to Objects ciblent IEnumerable , à l’exception notable de Cast et OfType , qui sont toutes deux utilisées pour convertir une collection typée “faible” (telle que MatchCollection ) en une IEnumerable générique IEnumerable – qui permet ensuite d’autres opérations LINQ.

Essaye ça:

 var matches = myRegEx.Matches(content).Cast(); 

Pour référence, s’il vous plaît voir Enumerable.Cast :

Convertit les éléments d’un IEnumerable au type spécifié.

Fondamentalement, c’est une façon de transformer un IEnumerable en un IEnumerable .

Je pense que ce serait quelque chose comme ça:

 bool result = matches.Cast().Any(m => m.Groups["name"].Value.Length > 128); 

Vous pouvez essayer quelque chose comme ça:

 List matchList = matches.Cast().Where(m => m.Groups["name"].Value.Length > 128).ToList(); 

MODIFIER:

  public static IEnumerable AsEnumerable(this IEnumerable enumerable) { foreach(object item in enumerable) yield return (T)item; } 

Vous devriez alors pouvoir appeler cette méthode d’extension pour la transformer en un IEnumerable:

  matches.AsEnumerable().Any(x => x.Groups["name"].Value.Length > 128);