我一直认为类应该满足能够使用 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/