我有以下代码:
MatchCollection matches = myRegEx.Matches(content);
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Linq扩展方法语法执行此操作?像这样的东西......
bool result = matches.Any(x => ... );
Run Code Online (Sandbox Code Playgroud)
msa*_*het 173
using System.Linq;
matches.Cast<Match>().Any(x => x.Groups["name"].Value.Length > 128)
Run Code Online (Sandbox Code Playgroud)
您只需将其从一个IEnumerable
转换为IEnumerable<Match>
(IEnumerable)即可访问IEnumerable上提供的linq扩展.
Jon*_*eet 45
指定显式范围变量类型时,编译器会插入一个调用Cast<T>
.所以这:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
Run Code Online (Sandbox Code Playgroud)
完全等同于:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
Run Code Online (Sandbox Code Playgroud)
也可以写成:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Cast
调用是必需的,因为MatchCollection
只实现ICollection
和IEnumerable
,没有IEnumerable<T>
.几乎所有的LINQ to Objects扩展方法都是针对的IEnumerable<T>
,有明显的例外Cast
和OfType
,两者都用于将"弱"类型的集合(例如MatchCollection
)转换为泛型IEnumerable<T>
- 然后允许进一步的LINQ操作.
试试这个:
var matches = myRegEx.Matches(content).Cast<Match>();
Run Code Online (Sandbox Code Playgroud)
供参考,请参阅Enumerable.Cast
:
将a的元素转换为
IEnumerable
指定的类型.
基本上它是翻动的一种方式IEnumerable
成IEnumerable<T>
.
归档时间: |
|
查看次数: |
16553 次 |
最近记录: |