如何使用Predicate以及如何自定定义Predicate委托

Posted 幽冥狂_七

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Predicate以及如何自定定义Predicate委托相关的知识,希望对你有一定的参考价值。

微软公司提供只能返回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;
        });
} 

 

 

以上是关于如何使用Predicate以及如何自定定义Predicate委托的主要内容,如果未能解决你的问题,请参考以下文章

y_pred 的自定义损失函数 Keras 仅高于某个阈值

如何在 Keras 自定义损失函数中使用张量?

如何使用自定义损失函数加载 Keras 模型?

Jenkins 2 如何使用 PowerShell 以及自定 build fail (指定 exit code)

如何获取自定义单元格并通过 indexpath 使用它的自定义项 - swift3?

word2016如何自定义安装