码迷,mamicode.com
首页 > 其他好文 > 详细

个人总结:匿名委托+内置委托+Lambda表达式

时间:2015-09-02 13:19:07      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

                                                                    匿名委托+内置委托+Lambda表达式

概要

     在实际开发中,项目开发框架不同,用到的技术是不一样的,这里总结一下用Linq开发,ORM之EF开发会大量使用的Lambda表达式;

正文

     之前提过.Net有一套扩展在IEumberable<T>泛型接口的扩展方法,本文是从这个基础继续总结;

     1.void Action<in T>:

     先拿一个ForEach()来讲:

     public void ForEach(Action<T> action);

     这个Action<T>是.Net的其中一个内置委托,Action<T>的其中一个签名如下:

     public delegate void Action<in T>(T obj);

     这个签名接受一个入参并且没有返回值,这里举一个例子,代码如下:

     //提供一个数据源

     static List<UserInfo> getList()
        {
            List<UserInfo> list = new List<UserInfo>() {
            new UserInfo("Francis",21),
            new UserInfo("Lyfeng",25),
            new UserInfo("Harry",24)
            };
            return list;
        }

    //面向对象编程

    class UserInfo
    {
        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public UserInfo(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
        public override string ToString()
        {
            return "姓名:" + this.name + " 年龄:" + this.Age;
        }
    }

    根据这个Action<T>的签名定义,来一个自定义方法myAction(UserInfo user):

技术分享

      在main函数中写两句代码:

        var list = getList();
        list.ForEach(myAction);

    结果:技术分享

   接下来,使用匿名委托来取代myAction,如下图:

技术分享

    再接下来,由匿名委托到Lambda表达式:

   技术分享

   2.bool Predicate<in T>

   再拿一个FindAll()来讲:

   public List<T> FindAll(Predicate<T> match);

   Predicate是.Net的另一个内置委托,其中一个重载签名如下:

   public delegate bool Predicate<in T>(T obj);

   这个重载返回值为bool,接受一个入参,接下来自定义一个myPredicate(UserInfo user)

   技术分享

    使用匿名委托实现:

    技术分享

     由匿名委托到Lambda表达式:

   技术分享

     3.TResult Func<in T, out TResult>

       拿Where()来讲,这是一个扩展至IEnumerable<TSource>的扩展方法:

      public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source,

                        Func<TSource, bool> predicate);

      Func<in T, out TResult>是.Net的另一个常用内置委托,其中一个签名如下:

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

       这个签名接受一个入参,返回值为TResult,即不固定的,下面以返回bool表示:

技术分享

         4.int Comparison<in T>(T x, T y)

       拿Sort()来讲,签名如下

       public void Sort(Comparison<T> comparison);

       Comparison<T>是.Net的其中一个内置委托,其中签名如下:

       public delegate int Comparison<in T>(T x, T y);

       返回值int,两个一样的入参:

       技术分享

  技术分享

 

   结束!

 

个人总结:匿名委托+内置委托+Lambda表达式

标签:

原文地址:http://www.cnblogs.com/Francis-YZR/p/4778274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!