Порядок переданої послідовності абсолютно критичний 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();