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

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

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

  1. delegate int Add(int a, int b);
  2. Add sdel;
  3. static void Main(string[] args)
  4. {
  5. Program prm = new Program();
  6. prm.sdel = GetAdd;
  7. if (prm.sdel != null)
  8. {
  9.  
  10. int res = prm.sdel(5, 6);
  11. Console.WriteLine(res);
  12. }
  13. }
  14.  
  15. static int GetAdd(int x,int y)
  16. {
  17. return x + y;
  18.  
  19. }

我们可以得到正确的值。

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

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);

}

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

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

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

  1. delegate int Add(int a, int b);
  2. Add sdel;
  3. static void Main(string[] args)
  4. {
  5. Program prm = new Program();
  6.  
  7. prm.sdel = (x, y) => x + y;
  8.  
  9. int res = prm.sdel(8, 6);
  10.  
  11. Console.WriteLine(res);
  12.  
  13. }
  14. }

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

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

匿名函数和Lambda表达式的更多相关文章

  1. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  2. 匿名函数:Lambda表达式和匿名方法

    匿名函数一个"内联"语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. 共有两种匿名函数: Lamb ...

  3. 3 委托、匿名函数、lambda表达式

    委托.匿名函数.lambda表达式 在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法.C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方 ...

  4. C#语法之匿名函数和Lambda表达式

    上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...

  5. 测开之路八十二:匿名函数:lambda表达式

    # 匿名函数:lambda表达式# lambda 参数: 逻辑f = lambda name: print(name)f('tom') f2 = lambda x, y: x + yprint(f2( ...

  6. [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式

    引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...

  7. 委托,匿名函数和lambda表达式

    很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...

  8. C++的匿名函数(lambda表达式)

    总述  C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...

  9. 匿名函数、lambda表达式

    匿名函数 func = lambda x: y #x是形参,y是返回值 键字lambda表示匿名函数,冒号前面的x表示函数参数,冒号后面的y表示匿名函数的返回值. 例1:返回列表中长度大于等于3的元素 ...

  10. 委托、匿名函数与Lambda表达式初步

    (以下内容主要来自<C#本质论第三版>第十二章委托和Lambda表达式) 一.委托续 上上周五看了看委托,初步明白了其是个什么,如何定义并调用.上周五准备看Lambda表达式,结果发现C# ...

随机推荐

  1. 浅析foreach原理

    在日常开发工作中,我们发现很多对象都能通过foreach来遍历,比如HashTable.Dictionary.数组等数据类型.那为何这些对象能通过foreach来遍历呢?如果写一个普通的Person类 ...

  2. 取A表数据,关联B表任意一条数据

     表A=================== AID, AName 1 jack 2 mary 3 lily 表B================== BID, AID, BName 1 1 aaa ...

  3. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记2 Xcode、Auto Layout及MVC

    原文链接不知道在哪, 接着上一话来讲,上一话中讲到了MVC,那么MVC在IOS8开发中是如何应用的呢?Paul Hegarty老师给我们展示了一个计算器的Demo,首先新建一个工程,老师把AppDel ...

  4. iOS开发——手机号,密码,邮箱,身份证号,中文判断

    目前这些方面的判断主要是用了正则表达式 手机号的判断,目前主要是长度.均是数字,支持的号段由于第三方通讯比如京东通讯,小米通讯等支持的号段挺多, 有171,170,135,147等等,所以号段限制简单 ...

  5. 十分钟搭建个人网站:Jekyll主题BoHu

    最近花了三天时间制作了我的第一个jekyll theme--BoHu.一款知乎风格的模板,使用jekyll模板引擎,十分钟就能搭建属于你自己的静态博客网站. 本主题的特征为: 知乎风格 分页导航使用的 ...

  6. FreeMarker-Built-ins for numbers

    http://freemarker.org/docs/ref_builtins_number.html#topic.extendedJavaDecimalFormat Page Contents ab ...

  7. OpenJudge/Poj 1915 Knight Moves

    1.链接地址: http://bailian.openjudge.cn/practice/1915 http://poj.org/problem?id=1915 2.题目: 总Time Limit: ...

  8. Newtonsoft.Json随手记

    private static Newtonsoft.Json.JsonSerializerSettings CreateSettings(string dateFormat) { Newtonsoft ...

  9. 初识jQuery(适合初学者哟.........)

     您要知道!! jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库. 微软公司甚至把jQuery作为他们的官方库.对 ...

  10. 关于window.location不跳转的问题

    今天在码代码的时候遇到个问题:html里采用onclick事件来实现window.location = url的跳转,在内嵌元素上又加上了href="javascrit:;"的属性 ...