您可以訪問大多數.net框架資源。
此處使用的方法如下:
static IEnumerable<TSource> IntersectIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
{
Set<TSource> set = new Set<TSource>(comparer);
foreach (TSource element in second) set.Add(element);
foreach (TSource element in first)
if (set.Remove(element)) yield return element;
}
static IEnumerable<TSource> ConcatIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second) {
foreach (TSource element in first) yield return element;
foreach (TSource element in second) yield return element;
}
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
foreach (TSource element in source) {
if (predicate(element)) return true;
}
return false;
}
哪裏Set
是一個功能類似某種HashSet
Intersect
和Concat
方法本身的內部類只是使對輸入參數的驗證和然後分別撥打IntersectIterator
和ConcatIterator
。
Where
方法也會進行驗證,然後構造一個WhereEnumerableIterator<T>
類的實例。這個類當你迭代它的行爲如下代碼:
public IEnumerable<T> IterateWhere(IEnumerable<T> source, Funct<T,bool> predicate)
{
foreach (var element in source)
{
if (predicate(element))
{
yield return element;
}
}
}
你確定窗簾後面有一個'foreach'嗎?這隻產生一個'IEnumerable <>',沒有任何東西被迭代。 –
我不是說每個我說這是如何工作,如果我將這寫入foreach然後什麼會... – Nick