Linq To Object——三种委托

简介: Linq To Object——三种委托

Predicate<T>泛型委托用来定义一组条件并确定指定对象是否符合这些条件的方法,其语如下:

 Public delegate bool Predicate<T>(T obj)


 参数说明:


  T:要比较的对象类型


Obj:要按照由此委托表示的方法中定义的条件进行比较的对象。


 返回值:如果符合此委托表示的方法中定义的条件,则为true,否则为false


Action<T>泛型委托用来封装一个方法,该方法只采用一个参数并且不返回值,其语法如下:public delegate void Action<T> (T obj)

参数说明                                                            


T:委托封装的方法的参数类型。


Obj:委托封装的方法的参数


Func<T>泛型委托封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。,其语法格式如下:

 public delegate TResult Func<T, TResult>(T arg);


T:此委托封装的方法的参数类型。


  TResult: 此委托封装的方法的返回值类型。


返回结果:   此委托封装的方法的返回值。例1:查找指定的字符串。


         //声明一个数组并初始化


           string[] strLists = new string[] { "明日科技", "C#编程词典", "C#范例大全" };


           Console.WriteLine("源字符串数组:");


           //使用foreach语句遍历输出


           foreach (string str in strLists)


           {

               Console.Write(str + "  ");


           }


           Console.WriteLine("\n");


           // 第一种写法 使用Lambda表达式查找数组中包含“C#”的字符串


  string[] strList = Array.FindAll(strLists, s => (s.IndexOf("C#") >= 0));


             //第二种写法 使用匿名方法的方式


string[] strList = Array.FindAll(strLists, (s) => { return s.IndexOf("C#") >= 0; });


           Console.WriteLine("查找到的包含“C#”的字符串:");


           //使用foreach语句遍历输出


           foreach (string str in strList)


           {

               Console.Write(str + "  ");


           }


输出结果:


源字符串数组:


明日科技  C#编程词典  C#范例大全



查找到的包含“C#”的字符串:


C#编程词典  C#范例大全


例2:Lambda表达式查找List列表,使用Predicate委托查找年龄大于30的员工。

     class Program


    {

       static void Main(string[] args)


       {

           new Program().PredicateDelegate();//调用自定义方法显示信息


       }


       public void PredicateDelegate()


       {

           List<User> P_List_user = new List<User>();//创建泛型集合


           //为泛型集合赋值


           P_List_user.Add(new User() { Name = "小刘", Age = 33, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小王", Age = 30, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小赵", Age = 32, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小吕", Age = 30, Pay = 5000 });


           P_List_user.Add(new User() { Name = "小房", Age = 31, Pay = 5000 });


           string P_Str = string.Empty;//定义一个字符串变量,用来记录输出信息


          //第一种实现方式:匿名方法


List<User> P_List_temp = P_List_user.FindAll(//在泛型集合中查找


               (pp) =>//定义匿名方法


               {

                   return pp.Age > 30;//指定查找条件


               });


//第二种实现方式:Lambda表达式,Predicate委托实现


    List<User> P_List_temp = P_List_user.FindAll(pp => pp.Age > 30);


//第一种实现方式:定义匿名方法


           P_List_temp.ForEach(//遍历查询结果


               (pp) =>                {

                   //记录查找到的信息


                   P_Str += "姓名:" + pp.Name + "   年龄:" +pp.Age.ToString() + Environment.NewLine;


               });


//第二种方式:Lambda表达式


P_List_temp.ForEach(pp=>Console.WriteLine(pp.Name));


           Console.WriteLine(P_Str);//输出信息


           Console.ReadLine();


       }


       class User


       {

           public string Name { get; set; }//自动实现名称属性


           public int Age { get; set; }//自动实现年龄属性


           public double Pay { get; set; }//自动实现薪资属性


           public override string ToString()


           {

               return string.Format(



同理计算员工工资的总和:


Double pay=P_List_user.Sum((pp)=>{return pp.Pay;});


                   "姓名:{0}  年龄:{1}  工资:{2}", Name, Age, Pay);//对信息进行格式化



           }


       }


}


目录
相关文章
|
存储 SQL 开发框架
Linq To Object标准操作符最强总结
Linq To Object标准操作符最强总结
147 0
|
SQL 存储 .NET
一起谈.NET技术,使用LINQ Expression构建Query Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
998 0
|
SQL 存储 .NET
使用LINQ Expression构建Que“.NET研究”ry Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
1009 0
|
.NET C# 开发框架
|
.NET
Linq to Object实现分页获取数据
最后调用的CSharp代码可以是: int totalcount = dboperator.Customers.Count(); //总记录数 int pagesize = 100;//每页显示数 ...
755 0
|
SQL .NET
LINQ&EF任我行(二)--LinQ to Object (转)
(原创:灰灰虫的家http://hi.baidu.com/grayworm)LinQ to Objects是LinQ家庭的核心,其它的LinQ也使用了与LinQ to Objects相同的查询句法。最终编译器都是把LinQ句法翻译成扩展方法的链式表达式,同时把扩展方法中的lambda表达式转换成匿名类中的匿名方法,然后再把查询表达式编译成MSIL。
1134 0
|
4天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
135 4
|
2月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
114 20