gpt4 book ai didi

.net - 与 LINQ 一起使用的集合类的要求

转载 作者:行者123 更新时间:2023-12-02 00:37:50 25 4
gpt4 key购买 nike

我一直认为类应该满足能够使用 Where() 的足够要求是实现 IEnumerable

但是今天我的一个 friend 问我一个问题,为什么他不能将Where() 应用于SPUserCollection 的对象?类(它来自 Sharepoint)。由于此类派生自 SPBaseCollection它实现了 IEnumerable - 我希望一切都应该没问题。但事实并非如此。

有什么想法,为什么?

最佳答案

LINQ 扩展方法在 IEnumerable<T> 上定义, 不是 IEnumerable .例如,请参阅 Where<T> 签名:

public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)

为了缓解这个问题,LINQ Cast<T> 扩展方法变成一个 IEnumerable进入 IEnumerable<T>然后可以与普通的 LINQ 函数一起使用。

在下面的例子中,你不能做 e.Where(...) , 但你可以 Cast然后使用 Where .

int[] xs = new[] { 1, 2, 3, 4 };
IEnumerable e = xs;
var odds = e.Cast<int>().Where(x => x % 2 == 1);

不幸的是,在处理 .NET BCL 中的前泛型 API 时需要大量使用它。

关于.net - 与 LINQ 一起使用的集合类的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878778/

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