“Lambda 表达式”(lambda expression)是一个匿名函数

省略delegate,甚至省略参数类型;

直接用(参数)=> {语句或表达式}

例如:

  1. button1.Click += (sender, e) =>{......}
  2.  
  3. new Thread ( () => {......} ). Start();
  4.  
  5. PlotFun ( x => x*x, , );

lambda特点:

lambda表达式比匿名函数简单,不写参数的匿名函数可以转化成任意多个参数的委托。

使用示例:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. using System.Threading;
  11.  
  12. namespace MethodDelegateLamda
  13. {
  14. public partial class Form1 : Form
  15. {
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20.  
  21. //示例1,使用线程
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. //csharp 1.0
  25. //使用委托,使用已定义好的函数
  26. new Thread(new ThreadStart(MyFun)).Start();
  27.  
  28. //csharp 2.0
  29. //省略委托:MyFun自动实例化为ThreadStart委托(
  30. new Thread(MyFun).Start();
  31. //匿名方法
  32. new Thread(new ThreadStart( delegate(){ Console.Write("my function"); })).Start();
  33. //匿名方法,省略参数列表
  34. new Thread(new ThreadStart( delegate{ Console.Write("my function"); })).Start();
  35. //匿名方法,自动转委托
  36. new Thread( delegate(){ Console.Write("my function"); }).Start();
  37.  
  38. //csharp 3.0
  39. //Lambda表达式
  40. new Thread(() => { Console.Write("my function"); }).Start();
  41.  
  42. }
  43.  
  44. void MyFun()
  45. {
  46. Console.Write("my function");
  47. }
  48.  
  49. //示例2,使用事件
  50.  
  51. private void button3_Click(object sender, EventArgs e)
  52. {
  53. Example3();
  54. }
  55. void Example3()
  56. {
  57. //csharp 1.0
  58. //使用委托,使用自定义函数
  59. this.MouseMove += new MouseEventHandler(Form1_MouseMove);
  60.  
  61. //csharp 2.0
  62. //自动转委托
  63. this.MouseMove += Form1_MouseMove;
  64.  
  65. Label lbl = this.label1; //这个变量下面使用了闭包(简单地说,使用外部的局部变量)
  66. this.MouseMove += new MouseEventHandler(delegate(object sender, MouseEventArgs e) { lbl.Text = e.X + "," + e.Y; });
  67. this.MouseMove += delegate(object sender, MouseEventArgs e) { lbl.Text = e.X + "," + e.Y; };
  68.  
  69. //csharp 3.0
  70. //使用Lambda表达式
  71. this.MouseMove += (object sender, MouseEventArgs e) => { lbl.Text = e.X + "," + e.Y; }; //Lamda
  72. this.MouseMove += (sender, e) => { lbl.Text = e.X + "," + e.Y; }; //可以省略类型
  73. }
  74.  
  75. void Form1_MouseMove(object sender, MouseEventArgs e)
  76. {
  77. this.label1.Text = e.X + "," + e.Y;
  78. }
  79.  
  80. //示例3, 数组排序
  81. class Book
  82. {
  83. public string title;
  84. public double price;
  85. public Book(string title, double price) { this.title=title; this.price=price; }
  86. }
  87. private void button2_Click(object sender, EventArgs e)
  88. {
  89. Random rnd = new Random();
  90. Book [] books = new Book[ ];
  91. for( int i=; i<books.Length; i++ ) books[i] = new Book( "Book"+i, rnd.Next() );
  92.  
  93. //csharp 1.0
  94. Array.Sort(books, new MyComparer()); //用一个IComparer
  95.  
  96. //csharp 2.0
  97. Array.Sort<Book>(books, new Comparison<Book>(delegate(Book book1, Book book2) { return (int)(book1.price - book2.price); })); //使用Comparison委托
  98. Array.Sort<Book>(books, delegate(Book book1, Book book2) { return (int)(book1.price - book2.price); });
  99.  
  100. //csharp 3.0
  101. Array.Sort<Book>(books, (Book book1, Book book2) => (int)(book1.price - book2.price));
  102. Array.Sort<Book>(books, (book1, book2) => (int)(book1.price - book2.price)); //省略参数类型
  103.  
  104. //使用Linq
  105. IOrderedEnumerable<Book> result = from book in books orderby book.price select book;
  106.  
  107. var result2 = from book in books where book.price>= orderby book.price select book.title;
  108. foreach (string s in result2) Console.Write(s);
  109.  
  110. var result3 = books
  111. .Where<Book>(b => b.price>=)
  112. .OrderBy<Book, double>(b => b.price, Comparer<double>.Default)
  113. .Select<Book,Book>(book => book);
  114. foreach (Book b in result3) Console.Write(b.price+" ");
  115. }
  116.  
  117. class MyComparer : System.Collections.IComparer
  118. {
  119. public int Compare(object x1, object x2)
  120. {
  121. return (int)(((Book)x1).price - ((Book)x2).price);
  122. }
  123. }
  124. }
  125. }

C#高级特性_Lambda的更多相关文章

  1. ActiveMQ中的Destination高级特性(一)

    ---------------------------------------------------------------------------------------- Destination ...

  2. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

  3. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  4. javascript高级特性

    01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...

  5. Visual Studio 2015 速递(4)——高级特性之移动开发

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  6. Android TextView高级特性使用

    TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...

  7. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

  8. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  9. VQuery高级特性

    VQuery高级特性 css方法 同时设置多个--for in 链式操作 链式操作 函数,链式操作 css 方法链式操作 json的使用 阻止冒泡,默认事件 VQuery插件 插件机制 可以扩展库的功 ...

随机推荐

  1. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  2. CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器

    一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...

  3. 玩转Windows Azure存储服务——网盘

    存储服务是除了计算服务之外最重要的云服务之一.说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工 ...

  4. var 0bj = []声明报错的小问题

    闲来无事,找了份javascript的习题来作作,结果第一题的答案就难住了,附原题: Javascript中, 以下哪条语句一定会产生运行错误?      答案(  B   ) A.var _变量=N ...

  5. dedecms调用标签总结(二)

    6. 列表调用 首页: {dede:arclist row='10' titlelen='24' typeid='2' orderby='pubdate'} <li> <a href ...

  6. CleanBlog(个人博客+源码)

    CleanBlog是一个高端(低调).大气(简洁)的个人博客系统,之前在网上看到了好多个人博客网站,感觉很酷的,自己也想搭建一个,最近 刚学完SSM(Spring/SpringMVC/MyBatis) ...

  7. POJ2230Watchcow[欧拉回路]

    Watchcow Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 7512   Accepted: 3290   Specia ...

  8. NOIP2000方格取数[DP]

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  9. 1.使用using释放资源

    using语句有二个关键字 >>作为关键字,using可以导入命名空间 >>作为C#语句,using可以释放对象占用的内存资源 语法: using(SqlConnection ...

  10. 叫板OpenStack:用Docker实现私有云

    看到各大厂商的云主机,会不会觉得高大上?目前大公司的主流方案是OpenStack,比如某个公司的私有云