IEnumerable<T>.Where(Predicate<T>)返回的集合可以看作是new出一个新的集合吗?
IEnumerable<T> original = 原始集合;
IEnumerable<T> filtered = original.Where(Predicate<T>);
假如这样,original与filtered是指向内存中独立的区域吗?
如果不是,那么每次foreach(var t in filtered)时,等于都会遍历一遍original里所有元素?
假如:
IEnumerable<T> original = 原始集合;
IEnumerable<T> filtered = original.ToArray();
这时再foreach(var t in filtered),这时就不是遍历original里所有元素?
我不知道理解的对不对。
[解决办法]
IEnumerable<T> original = 原始集合;
IEnumerable<T> filtered = original.Where(Predicate<T>);
或者
IEnumerable<T> original = 原始集合;
IEnumerable<T> filtered = original.ToArray();
我的理解:都是指向不同的内存区域.遍历filtered的时候,和original没有关系了
[解决办法]
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate){ if (source == null) { throw Error.ArgumentNull("source"); } if (predicate == null) { throw Error.ArgumentNull("predicate"); } if (source is Iterator<TSource>) { return ((Iterator<TSource>) source).Where(predicate); } if (source is TSource[]) { return new WhereArrayIterator<TSource>((TSource[]) source, predicate); } if (source is List<TSource>) { return new WhereListIterator<TSource>((List<TSource>) source, predicate); } return new WhereEnumerableIterator<TSource>(source, predicate);}
[解决办法]