Where这个方法主要在于为List添加过滤条件,使用委托的方式将过滤条件方法传入。委托中传入参数,返回bool类型的结果,如果返回为true,则八元素选择出来,最后把所有满足条件的元素一起返回。
与Array.FindAll类似,他们的却区别在于FindAll是.net 2.0中的东西,而Where是为了linq而实现的扩展方法,是3.5中的东西前者使用的是Predicate<T>委托,而后者却是Func<T, bool>委托。
如:List.Where(Func<T, bool> predicate);
具体案例(List.Where)代码:
List<int> intList = new List<int>()//创建整型数据集合
{
2,5,7,9,10,55,8,24
};
var temp = intList.Where(a =>
{
return a > 7;
});//使用lambda表达式,如果集合中整数大于7怎返回true
foreach (var item in temp)
{
Console.WriteLine(item.ToString());
}
结果:
结果.png
我们通过模仿他方法的处理,写一个类似Where的扩展方法MyWhere,使用方法与Where一致,从中看出where的内部工作原理:
写扩展方法的的三个要素:
- 公有静态类。
- 公有静态方法。
- this关键字,this后面跟类型
具体案例(List.MyWhere)代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateDemo
{
//共有静态类
public static class MyWhereExt
{
//公有静态方法
public static List<T> MyWhere(this List<T> list, Func<T, bool> predicate)
{
List<T> result = new List<T>();//创建结果集合,存储符合predicate过滤的元素
foreach (var item in list)//循环集合
{
if (predicate(item))//判断是否符合过滤方法
{
result.Add(item);//符合加入集合
}
}
return result;//返回结果
}
}
}