微软公司提供只能返回bool值,接受一个参数的委托类型(Predicate)。
//Predicate委托
public static class PredicateDemo{
//内置方法
public static void TestPredicate(){
//泛型集合
List<User> user = Five.GetList();
//user.Find();
//返回一个bool值
//例1
List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u){u.age>10;}));
//返回一个bool值
//例2
List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u ){
bool isTrue = false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
}));
Console.WriteLine(newUslist.toList());
//调用自定义委托
List<User> newUslist = user.MyFind(new PanDuan<User>(delegate(User u){
bool isTrue =false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
}));
}
#region 自定义委托
public delegate bool PanDuan<T>(T t);
public static List<T> MyFind(this List<T> ls,PanDuan<T> match){
List<T> newTs = new List<T>();
foreach(T t in ls){
if(match(t)){
newTs.Add(t);
}
}
return newTs;
}
#endregion
//上面两个例子放回结果是一样的。
-----------------------------------------------
lambad表达式
//例2
List<user> newUslist = user.FindAll(new Predicate<User>(delegate(User u ){
bool isTrue = false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
}));
第一步去掉 new Predicate<User>
List<user> newUslist = user.FindAll(delegate(User u ){
bool isTrue = false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
});
第二步去掉 去掉匿名函数delegate(User u)换成 u=>
List<user> newUslist = user.FindAll({
bool isTrue = false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
}));
如下:
List<user> newUslist = user.FindAll(u=>{
bool isTrue = false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
});
//自定义委托改写lambad表达式
//调用自定义委托
List<User> newUslist = user.MyFind(u=>{
bool isTrue =false;
if(u.PassWord.equals("123")&&u.age > 10){
isTrue =true;
}
return isTrue;
});
}