• 匿名函数和Lambda表达式


    这个题目有点牵强,真不知道如何取一个比较中意的名称,写技术博客,我很少拘泥小节,但是注重细节,如果细节都出现问题了,那么这个博文也就失去了价值。

     

    其实应该从委托说起,委托是C#中的一个重要的内容,记得在有关MVC博文的时候就提到过,委托可以将执行体分开,这样可以有效的解耦。我从过一个简单的示例说明下,比如要求一个加法的运算,我们就可以通过委托来实现

     

    常常的做法是定义一个委托,声明一个委托变量,给委托变量绑定一个求加法的函数,也就是赋值,然后通过委托变量进行操作。

     delegate int Add(int a, int b);
            Add sdel;
            static void Main(string[] args)
            {
                Program prm = new Program();
                prm.sdel = GetAdd;
                if (prm.sdel != null)
                {
    
                    int res = prm.sdel(5, 6);
                    Console.WriteLine(res);
                            }
            }
    
            static int GetAdd(int x,int y)
            {
                return x + y;
    
            }
    

     我们可以得到正确的值。

    现在来看匿名函数,从字面意思来看,就是一个没有名称的函数而已(我们过去对函数的定义,函数名,函数体等),而现在要说的函数是没有名字的,至少名字不是又我们给定的,那么对于上面的我们可以写成:

      delegate int Add(int a, int b);
            Add sdel;
            static void Main(string[] args)
            {
                Program prm = new Program();
                    prm.sdel = delegate(int x, int y) { return x + y; };
                     int res = prm.sdel(8, 6);

                    Console.WriteLine(res);

                       }



    prm.sdel = delegate(int x, int y) { return x + y; };

     通过这种方式,我们可以不用写另外一个函数,就像上面提到的GetAdd,代码减少了不少。

    接着看lambda表示,lambda表达式其实就是一个匿名函数,只不过它有自己的语法,当然不仅仅如此,其结构也很清晰,看下面的代码

    delegate int Add(int a, int b);
            Add sdel;
            static void Main(string[] args)
            {
                Program prm = new Program();
                           
                    
                   prm.sdel = (x, y) => x + y;
    
                  int   res = prm.sdel(8, 6);
    
                    Console.WriteLine(res);
    
                }
            }
    

     上面的写法,也实现了我们求和的目的,但是代码量大大减少。

    现在看下题目,其实这是一个有着发展史的顺序的,发展史可能有点过了,暂且就这么用吧,匿名函数是演变为lambda的,看看NET的发展史就可以清楚了,这里就不罗嗦了,其余的思考空间留给读者吧。

  • 相关阅读:
    微信公众平台可通过UnionID机制在多公众号间帐号互通
    草根玩微博 中产玩微信 土豪玩什么?支持Yo的iWatch?
    The Model Complexity Myth
    BuzzSumo:什么样的文章能获得疯转?(基于1亿篇文章大数据分析)
    深度学习成长的烦恼
    猜你喜欢-----推荐系统原理介绍
    程序设计小问题
    机器学习是什么--周志华
    提高matlab运行速度和节省空间的心得
    matlab提速技巧(自matlab帮助文件)
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/3189708.html
Copyright © 2020-2023  润新知