Ale*_*gas 12 .net linq generics linq-to-objects icollection
我想对一个MatchCollection
对象运行一个LINQ查询,但发现这是不可能的,因为它没有实现ICollection<T>
,只是ICollection
.
在代码简洁性以及性能和内存使用方面,将LINQ与非泛型集合一起使用的最佳选择是什么?
(如果有兴趣,这里是非LINQuified代码:)
MatchCollection fieldValues = Regex.Matches(fieldValue, @"(?<id>\d+);#(?<text>[^;|^$]+)");
foreach (Match m in fieldValues)
{
if (m.Groups["text"].Value.Equals(someString))
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
dah*_*byk 11
您也可以将someString
过滤器包含在LINQ中.
var matches = Regex.Matches(fieldValue, @"(?<id>\d+);#(?<text>[^;|^$]+)");
var textMatches = from Match m in matches
where m.Groups["text"].Value.Equals(someString)
select m;
foreach (Match m in textMatches)
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
请注意,编译器会像这样翻译一个查询...
var q = from MyType x in myEnum select x;
Run Code Online (Sandbox Code Playgroud)
......进入这...
var q = from x in myEnum.Cast<MyType>() select x;
Run Code Online (Sandbox Code Playgroud)
...所以包括类型和Cast<T>()
冗余.
性能方面,Cast<T>()
只是进行显式类型转换并产生值,因此性能损失可以忽略不计.对于您不确定所有成员都是所需类型的旧版集合,您可以OfType<T>()
改为使用.
归档时间: |
|
查看次数: |
8523 次 |
最近记录: |