TakeWhile操作符用于从输入序列中返回满足一定条件的元素。
需要特别注意的是,
如果TakeWhile遇到一个不满足条件的元素,就会跳出检查,不再检查剩下的元素。
TakeWhile操作符有两个方法原型,第一个方法原型定义如下。
public static IEnumerable<T > TakeWhile<T >(
this IEnumerable<T > source,
Func<T, bool > predicate);
TakeWhile操作符被调用时,会将source序列中的每一个元素作为参数顺序传入委托predicate中执行一遍,执行结果为true将会被添加到结果集中,
结果为false,则立即跳出循环。
示例如下:
static void Main(string[] args)
{
List<string > list = new List<string >()
{
"you","say","hellow","world","how","are","you"
};
var query = list.TakeWhile(p = > p.Length == 3);
foreach (var item in query)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
运行效果如下:
第二个原型方法如下:
public static IEnumerable<TSource > SkipWhile<TSource >(
this IEnumerable<TSource > source,
Func<TSource, int, bool > predicate);
对比第一个原型方法的定义,第二个原型方法的委托参数多了一个int参数,这个参数表示下标,还是如下示例:
class Program
{
static void Main(string[] args)
{
List<string > list = new List<string >()
{
"you","say","hellow","world","how","are","you"
};
var query = list.TakeWhile((p, i) = > i <1 && p.Length == 3);
foreach (var item in query)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
运行效果如下:
2