Where和TakeWhile区别

    var numbers = new int[] { 1, 2, 3, 4, 5 };
            var num = numbers.Where<int>(p => p < 3 || p == 5).ToList();    // 1,2,5
            var num1 = numbers.TakeWhile<int>(p => p < 3 || p == 5).ToList();   // 1,2
            Console.Read();

底层:

      static IEnumerable<TSource> TakeWhileIterator<TSource>(IEnumerable<TSource> source, Func<TSource, int, bool> predicate) {
            int index = -1;
            foreach (TSource element in source) {
                checked { index++; }
                if (!predicate(element, index)) break;
                yield return element;
            }
        }

break的原因。

posted @ 2015-11-30 19:23  江境纣州  阅读(29)  评论(0编辑  收藏  举报