为了方便理解和记忆,将常用的延时执行的Enumerable类方法成员分了下组,具体如下:
1.Take用于从一个序列的开头返回指定数量的元素
2.TakeWhile 用于获取指定序列从头开始符合条件的元素,直到遇到不符合条件的元素为止
3.Skip跳过序列中指定数量的元素
4.SkipWhile 用于跳过序列总满足条件的元素,然会返回剩下的元素
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 延时执行的Enumerable类方法
{
class Program
{
static void Main(string[] args)
{
string[] names = { "DebugLZQ","DebugMan","Sarah","Jerry","Tom","Linda","M&M","Jeffery"};
//1.Take用于从一个序列的开头返回指定数量的元素
//
//a.在数组上直接使用Take方法
foreach (string name in names.Take(3))
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("-----");
//b.在LINQ返回的IEnumerable<T>序列上使用Take方法
var query = from string name in names
where name.Length <=3
select name;
foreach (string name in query.Take(1))
{
Console.Write("{0} ",name);
}
Console.WriteLine();
Console.WriteLine("----------------------------");
Console.ReadKey(false);
//2.TakeWhile 用于获取指定序列从头开始符合条件的元素,直到遇到不符合条件的元素为止
//
var takenames = names.TakeWhile(n => n.Length>4);
var takenames2 = names.TakeWhile((n,i)=>n.Length<10&&i<3);
foreach (string name in takenames)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("-----");
foreach (string name in takenames2)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("----------------------------");
Console.ReadKey(false);
//3.Skip跳过序列中指定数量的元素
//
foreach (string name in names.Skip(5))
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("-----");
var query_skip = (from name in names
where name.Length >= 3
select name).Skip(2);
foreach (string name in query_skip.Skip(2) )
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("----------------------------");
Console.ReadKey(false);
//4.SkipWhile 用于跳过序列总满足条件的元素,然会返回剩下的元素
//跳过名字长度大于3的
var takenames_SkipWhile = names.SkipWhile(n => n.Length >3);
foreach (string name in takenames_SkipWhile)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("-----");
var takenames_SkipWhile2 = names.SkipWhile((n,i)=>n.Length>3&&i>2);
foreach (string name in takenames_SkipWhile2)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("----------------------------");
Console.ReadKey(false);
//小结Take、Skip获得第N到第M个元素
var names_TakeAndSkip = names.Skip(5).Take(3);
var names_TakeAndSkip2 = (from name in names
select name).Skip(5).Take(3);
foreach (string name in names_TakeAndSkip)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("-----");
foreach (string name in names_TakeAndSkip2)
{
Console.Write("{0} ", name);
}
Console.WriteLine();
Console.WriteLine("----------------------------");
Console.ReadKey(false);
}
}
}










