“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. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS

    上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...

  2. STM32F407 RCC时钟配置

    新上手项目需要使用STM32F407,在使用STM32F1系列时就喜欢自己用库函数设置系统时钟,所以F4也打算这么做,但是遇到了一些问题. 其中百度文库有篇文章关于RCC的文章将的不错,地址:http ...

  3. webstorm 10 配置

    小弟以前都是用sublime,sublime是一款轻量级的文本编辑器.但是现在要隆重介绍的前端开发工具webstorm,为什么说它是前端开发工具,而不是前端开发编辑器呢?它具备的功能,不只只是编辑器这 ...

  4. NoSql之旅--Cassandra的Cql简介(二)

    安装完Cassandra后我们就开始体验一下这个数据库的查询吧,传统的关系数据库使用的sql进行查询,而Cassandra使用的cql. cql语法还是很多的,这里不一一详细阐述了,也没这个必要,具体 ...

  5. javaScript事件(二)事件处理程序

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...

  6. [转]Oracle Form 触发器执行顺序

    Trigger 不是数据库中的触发器,不过功能类似,都是当某个事件发生的时候会触发. Trigger中可以编写代码,当对应事件发生的时候就会执行该Trigger中的代码. Oracle Form中的T ...

  7. HashMap的工作原理深入再深入

    前言 首先再次强调hashcode (==)和equals的真正含义(我记得以前有人会说,equals是判断对象内容,hashcode是判断是否相等之类): equals:是否同一个对象实例.注意,是 ...

  8. UVALive 5061 Lightning Energy Report --LCA

    题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0) 解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k), ...

  9. [转]mysql 乱码问题解决终结

    http://www.th7.cn/db/mysql/2011-07-07/9217.shtml 查看 MYSQL的字符设置,在SQL查询界面输入 SHOW VARIABLES LIKE 'chara ...

  10. C#中Abstract和Virtual

    C#中Abstract和Virtual 在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Vi ...