Using C# LINQ - A Practical Overview
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Methods - Extract multiple elements
In the previous lesson, we learned about Take() and Skip(), both of which accept an integer parameter. Each of these methods also have a variant that utilizes a delegate method to determine which elements will be taken or skipped.
TakeWhile(<predicate>) method
TakeWhile() behaves similarly to the Take() method except that instead of taking the first n elements of a sequence, it "takes" all of the initial elements of a sequence that meet the criteria specified by the predicate, and stops on the first element that doesn't meet the criteria. It then returns a new sequence containing all the "taken" elements.
The predicate is passed into TakeWhile() as a delegate method that takes a single parameter of type T (where T is the data type of the elements in the IEnumerable<T> sequence) and returns a bool indicating whether or not the passed-in element should be "taken".
List<int> ints = new List<int> { 1, 2, 4, 8, 4, 2, 1 };
// Will contain { 1, 2, 4 }
IEnumerable<int> result = ints.TakeWhile(theInt => theInt < 5);
SkipWhile(<predicate>) method
Just as Skip() is the spiritual opposite of Take(), SkipWhile() is the opposite of TakeWhile(). SkipWhile() "skips" the initial elements of a sequence that meet the criteria specified by the predicate and returns a new sequence containing the first element that doesn't meet the criteria as well as any elements that follow.
Again, the predicate is provided as a delegate method that takes a single element of type T and returns a bool indicating whether or not the passed-in element should be "skipped".
List<int> ints = new List<int> { 1, 2, 4, 8, 4, 2, 1 };
// Will contain { 4, 8, 4, 2, 1 }
IEnumerable<int> result = ints.SkipWhile(theInt => theInt != 4);
Exercise
In this exercise, make the GetStartThroughEnd() method return all the words from the provided sequence that occur between the words "start" (inclusive) and "end" (non-inclusive).