积极答复者
C# Enumerable.Where()

问题
答案
-
Where是一个扩展方法。
第一个参数,表明这个方法对谁扩展(凡是实现了IEnumerable<TSource>的,在3.5以及以上版本中一定涉及到此方法)。
第二个参数,是一个泛型委托(第一个参数是IEnumerable泛型那个实际类型,而第二个则是根据某个条件判断该类型是否符合条件,符合返回true,否则false)。
下面给出源代码:
[__DynamicallyInvokable] public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { if (source != null) { if (predicate != null) { if (source as Enumerable.Iterator<TSource> == null) { if (source as TSource[] == null) { if (source as List<TSource> == null) { return new Enumerable.WhereEnumerableIterator<TSource>(source, predicate); } else { return new Enumerable.WhereListIterator<TSource>((List<TSource>)source, predicate); } } else { return new Enumerable.WhereArrayIterator<TSource>((TSource[])source, predicate); } } else { return ((Enumerable.Iterator<TSource>)source).Where(predicate); } } else { throw Error.ArgumentNull("predicate"); } } else { throw Error.ArgumentNull("source"); } }
- 已标记为答案 weipxf 2012年11月6日 8:32
-
- 已标记为答案 weipxf 2012年11月6日 8:32
全部回复
-
Where是一个扩展方法。
第一个参数,表明这个方法对谁扩展(凡是实现了IEnumerable<TSource>的,在3.5以及以上版本中一定涉及到此方法)。
第二个参数,是一个泛型委托(第一个参数是IEnumerable泛型那个实际类型,而第二个则是根据某个条件判断该类型是否符合条件,符合返回true,否则false)。
下面给出源代码:
[__DynamicallyInvokable] public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { if (source != null) { if (predicate != null) { if (source as Enumerable.Iterator<TSource> == null) { if (source as TSource[] == null) { if (source as List<TSource> == null) { return new Enumerable.WhereEnumerableIterator<TSource>(source, predicate); } else { return new Enumerable.WhereListIterator<TSource>((List<TSource>)source, predicate); } } else { return new Enumerable.WhereArrayIterator<TSource>((TSource[])source, predicate); } } else { return ((Enumerable.Iterator<TSource>)source).Where(predicate); } } else { throw Error.ArgumentNull("predicate"); } } else { throw Error.ArgumentNull("source"); } }
- 已标记为答案 weipxf 2012年11月6日 8:32
-
- 已标记为答案 weipxf 2012年11月6日 8:32
-
抱歉,你提供的 url 参考我又看了,里面的范例我看得懂,但你上面提供的范例...我还是不太理解...是否能麻烦...传一些参数...得到实际的值...谢谢。
if (source != null) { if (predicate != null) { if (source as Enumerable.Iterator<TSource> == null) { if (source as TSource[] == null) { if (source as List<TSource> == null) { return new Enumerable.WhereEnumerableIterator<TSource>(source, predicate); } else { return new Enumerable.WhereListIterator<TSource>((List<TSource>)source, predicate); } } else { return new Enumerable.WhereArrayIterator<TSource>((TSource[])source, predicate); } } else { return ((Enumerable.Iterator<TSource>)source).Where(predicate); } } else { throw Error.ArgumentNull("predicate"); } } else { throw Error.ArgumentNull("source"); }
- 已编辑 weipxf 2012年11月6日 7:07