gpt4 book ai didi

.net - 将 LINQ 与实现非泛型 ICollection 的类一起使用

转载 作者:行者123 更新时间:2023-12-04 00:57:47 25 4
gpt4 key购买 nike

我想对 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
}
}

最佳答案

您可以包含您的 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
}

请注意,编译器会翻译这样的查询...
var q = from MyType x in myEnum select x;

...进入这个...
var q = from x in myEnum.Cast<MyType>() select x;

...所以包括类型和 Cast<T>()是多余的。

性能方面, Cast<T>()只是进行显式类型转换并产生值,因此性能影响可以忽略不计。对于您不确定所有成员都属于所需类型的遗留集合,您可以使用 OfType<T>()相反。

关于.net - 将 LINQ 与实现非泛型 ICollection 的类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1097486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com