Порядок переданої послідовності абсолютно критичний TakeWhile, який припиняється, як тільки повернеться предикат false, тоді як Whereбуде продовжуватися оцінка послідовності, що перевищує перше falseзначення.
Поширене використання - TakeWhileце під час ледачого оцінювання великих, дорогих чи навіть нескінченних чисел, де ви можете мати додаткові знання про впорядкування послідовності.
Наприклад, враховуючи послідовність:
IEnumerable<BigInteger> InfiniteSequence()
{
BigInteger sequence = 0;
while (true)
{
yield return sequence++;
}
}
Результатом .Whereбуде нескінченний цикл, який намагається оцінити частину перелічуваного:
var result = InfiniteSequence()
.Where(n => n < 100)
.Count();
В той час .TakeWhile, як a , і озброєний знаннями про те, що перелічувальні коти зростають, дозволить оцінити часткову послідовність:
var result = InfiniteSequence()
.TakeWhile(n => n < 100)
.Count();