Ich habe folgenden Code:
MatchCollection matches = myRegEx.Matches(content);
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
Gibt es eine Möglichkeit, dies mithilfe der Syntax der LINQ-Erweiterungsmethode zu tun?
Etwas wie das:
bool result = matches.Any(x => ... );
using System.Linq
ein Syntaxfehler sindWenn Sie einen expliziten Bereichsvariablentyp angeben , fügt der Compiler einen Aufruf an ein
Cast<T>
. Also das:ist genau gleichbedeutend mit:
was auch geschrieben werden kann als:
In diesem Fall ist der
Cast
Aufruf erforderlich, daMatchCollection
nurICollection
undIEnumerable
nicht implementiert wirdIEnumerable<T>
. Fast alle LINQ to Objects-Erweiterungsmethoden zielen darauf abIEnumerable<T>
, mit den bemerkenswerten Ausnahmen vonCast
undOfType
, die beide verwendet werden, um eine "schwach" typisierte Sammlung (z. B.MatchCollection
) in eine generische umzuwandelnIEnumerable<T>
- was dann weitere LINQ-Operationen ermöglicht.quelle
Versuche dies:
Als Referenz siehe
Enumerable.Cast
:Im Grunde ist es eine Möglichkeit, aus einem
IEnumerable
ein zu machenIEnumerable<T>
.quelle
Ich denke, es wäre ungefähr so:
quelle
MatchCollection
nur implementiertIEnumerable
. Es ist nicht stark typisiert.Sie können so etwas ausprobieren:
quelle
BEARBEITEN:
Dann sollten Sie diese Erweiterungsmethode aufrufen können, um sie in eine IEnumerable umzuwandeln:
quelle
MatchCollection
nur implementiertIEnumerable
. Es ist nicht stark typisiert.