Where操作符用于限定输入集合中的元素,将符合条件的元素组织生成一个序列结果。
Where操作符的方法原型有两个,第一个方法原型定义如下。
public static IEnumerable<T > Where<T >(
this IEnumerable<T > source,
Func<T, bool > predicate);
Where操作符会将集合中的每个元素都传入到委托参数中执行一次委托参数方法,如果满足条件,就会将当前元素添加到新的序列中,并最终返回这个新的序列。
第一个方法的委托参数只接受一个T类型的参数,bool是返回值,即表示集合中的每个元素调用委托参数方法时,如果返回值为true,就会将当前元素添加的新的序列中。
示例如下:
static void Main(string[] args)
{
List<int > list = new List<int >();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
list.Add(6);
list.Add(7);
list.Add(8);
list.Add(9);
list.Add(10);
var query = list.Where(x = > x > 5); //输出值大于5的元素
//query的结果应该是 6,7,8,9,10
foreach (var i in query)
{
Console.WriteLine(i.ToString());
}
Console.ReadLine();
}
输出结果如下:
第二个方法原型定义如下:
public static IEnumerable<T > Where<T >(
this IEnumerable<T > source,
Func<T,int, bool > predicate);
相比于第一个方法,第二个方法的委托参数多出一个int参数,该参数表示当前集合元素的下标,从0开始,示例如下:
static void Main(string[] args)
{
List<int > list = new List<int >();
list.Add(0);
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
list.Add(6);
list.Add(7);
list.Add(8);
list.Add(9);
list.Add(10);
var query = list.Where((x, p) = > x > 5 && p > 8); //输出值大于5且下标大于8的元素
//query的结果应该是9,10
foreach (var i in query)
{
Console.WriteLine(i.ToString());
}
Console.ReadLine();
}
输出结果如下:
T