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

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

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

例如:

button1.Click += (sender, e) =>{......}

new Thread  ( () => {......} ). Start();

PlotFun ( x => x*x, ,  );

lambda特点:

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

使用示例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; using System.Threading; namespace MethodDelegateLamda
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //示例1,使用线程
private void button1_Click(object sender, EventArgs e)
{
//csharp 1.0
//使用委托,使用已定义好的函数
new Thread(new ThreadStart(MyFun)).Start(); //csharp 2.0
//省略委托:MyFun自动实例化为ThreadStart委托(
new Thread(MyFun).Start();
//匿名方法
new Thread(new ThreadStart( delegate(){ Console.Write("my function"); })).Start();
//匿名方法,省略参数列表
new Thread(new ThreadStart( delegate{ Console.Write("my function"); })).Start();
//匿名方法,自动转委托
new Thread( delegate(){ Console.Write("my function"); }).Start(); //csharp 3.0
//Lambda表达式
new Thread(() => { Console.Write("my function"); }).Start(); } void MyFun()
{
Console.Write("my function");
} //示例2,使用事件 private void button3_Click(object sender, EventArgs e)
{
Example3();
}
void Example3()
{
//csharp 1.0
//使用委托,使用自定义函数
this.MouseMove += new MouseEventHandler(Form1_MouseMove); //csharp 2.0
//自动转委托
this.MouseMove += Form1_MouseMove; Label lbl = this.label1; //这个变量下面使用了闭包(简单地说,使用外部的局部变量)
this.MouseMove += new MouseEventHandler(delegate(object sender, MouseEventArgs e) { lbl.Text = e.X + "," + e.Y; });
this.MouseMove += delegate(object sender, MouseEventArgs e) { lbl.Text = e.X + "," + e.Y; }; //csharp 3.0
//使用Lambda表达式
this.MouseMove += (object sender, MouseEventArgs e) => { lbl.Text = e.X + "," + e.Y; }; //Lamda
this.MouseMove += (sender, e) => { lbl.Text = e.X + "," + e.Y; }; //可以省略类型
} void Form1_MouseMove(object sender, MouseEventArgs e)
{
this.label1.Text = e.X + "," + e.Y;
} //示例3, 数组排序
class Book
{
public string title;
public double price;
public Book(string title, double price) { this.title=title; this.price=price; }
}
private void button2_Click(object sender, EventArgs e)
{
Random rnd = new Random();
Book [] books = new Book[ ];
for( int i=; i<books.Length; i++ ) books[i] = new Book( "Book"+i, rnd.Next() ); //csharp 1.0
Array.Sort(books, new MyComparer()); //用一个IComparer //csharp 2.0
Array.Sort<Book>(books, new Comparison<Book>(delegate(Book book1, Book book2) { return (int)(book1.price - book2.price); })); //使用Comparison委托
Array.Sort<Book>(books, delegate(Book book1, Book book2) { return (int)(book1.price - book2.price); }); //csharp 3.0
Array.Sort<Book>(books, (Book book1, Book book2) => (int)(book1.price - book2.price));
Array.Sort<Book>(books, (book1, book2) => (int)(book1.price - book2.price)); //省略参数类型 //使用Linq
IOrderedEnumerable<Book> result = from book in books orderby book.price select book; var result2 = from book in books where book.price>= orderby book.price select book.title;
foreach (string s in result2) Console.Write(s); var result3 = books
.Where<Book>(b => b.price>=)
.OrderBy<Book, double>(b => b.price, Comparer<double>.Default)
.Select<Book,Book>(book => book);
foreach (Book b in result3) Console.Write(b.price+" ");
} class MyComparer : System.Collections.IComparer
{
public int Compare(object x1, object x2)
{
return (int)(((Book)x1).price - ((Book)x2).price);
}
}
}
}

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. 三:shell运算符

    1:declare命令 shell默认是字符串型        如果需要加减乘除,需要定义为整型declare命令:改变默认变量的类型decalre [+/-] [选项]  变量名      -给变量 ...

  2. mac 启动apache服务

    启动服务:sudo /usr/sbin/apachectl start 停止服务:sudo /usr/sbin/apachectl stop 重启服务:sudo /usr/sbin/apachectl ...

  3. 说说React

    一个组件,有自己的结构,有自己的逻辑,有自己的样式,会依赖一些资源,会依赖某些其他组件.比如日常写一个组件,比较常规的方式: 通过前端模板引擎定义结构 JS文件中写自己的逻辑 CSS中写组件的样式 通 ...

  4. [转]C#网络编程(同步传输字符串) - Part.2

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part2.aspx 服务端客户端通信 在与服务端的连接建立以 ...

  5. Semiautomated IMINT Processing Baseline System——翻译

    题目 半自动的IMINT(图像情报)处理基准系统 摘要 SAIP ACTD(半自动图像情报处理高级概念技术展示项目)的目的是,通过战略上的传感器采集,使图像成为指挥官掌控整个战场的主要源头.该采集系统 ...

  6. 翻译《Writing Idiomatic Python》(四):字典、集合、元组

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  7. 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序

    转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775  最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不 ...

  8. 转:大气炫酷焦点轮播图js特效

    使用方法 Step 1. 在html的标签内引入相关文件 <script type="text/javascript" src="js/myfocus-2.0.0. ...

  9. PLSQL Developer win7 64位 安装方法

    安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0).Win7 64位系统暂无PLSQLDeveloper,所以下一个32位的. 下载insta ...

  10. [No000059]知道这些,你的时间会比别人多一大截

    大噶猴,这里是最近不爱断案,爱上了号脉问诊的包大人.来看看下面这些症状,你中了几条? 字的快餐阅读 2.微博.微信.QQ空间.微博.微信.QQ空间……陷在这样的循环里 3.每天好像接收了很多信息,然而 ...