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的原因。