Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 3
0
        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);
        }