public static IEnumerable <TResult> OrderedCompareGroupJoin <TOuter, TInner, TKey, TResult>(this IEnumerable <TOuter> outer, IEnumerable <TInner> inner, Func <TOuter, TKey> outerKeySelector, Func <TInner, TKey> innerKeySelector, Func <TOuter, IEnumerable <TInner>, TResult> resultSelector, IComparer <TKey> comparer = null) { if (outer == null) { throw new ArgumentNullException("outer"); } if (inner == null) { throw new ArgumentNullException("inner"); } if (outerKeySelector == null) { throw new ArgumentNullException("outerKeySelector"); } if (innerKeySelector == null) { throw new ArgumentNullException("innerKeySelector"); } if (resultSelector == null) { throw new ArgumentNullException("resultSelector"); } if (comparer == null) { comparer = Comparer <TKey> .Default; } var innerEnumerator = new FilteredEnumerator <TInner>(inner); return(outer.Select(outerItem => resultSelector(outerItem, innerEnumerator.SkipAndTakeWhile(innerItem => comparer.Compare(outerKeySelector(outerItem), innerKeySelector(innerItem)))))); }
public void TestEnumerator() { int[] items = new int[] { 1, 2, 3, 4, 5, 6 }; int[] expected = new int[] { 2, 4, 6 }; IEnumerator actual = new FilteredEnumerator(items, new Predicate(Even)); for (int i = 0; i < expected.Length; ++i) { Assert(actual.MoveNext()); AssertEquals(expected[i], actual.Current); } Assert(!actual.MoveNext()); }
public IEnumerator <Instance> GetEnumerator() { IEnumerator <Instance> result; _locker.EnterReadLock(); result = new SafeEnumerator <Instance>(_internalCollection.GetEnumerator(), _locker); if (Filter) { result = new FilteredEnumerator(result, i => i.Archivable && i.GetType().IsPublic); } _locker.ExitReadLock(); return(result); }