C#高级特性_Lambda
“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的更多相关文章
- ActiveMQ中的Destination高级特性(一)
---------------------------------------------------------------------------------------- Destination ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- javascript高级特性
01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Android TextView高级特性使用
TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- Python的高级特性7:闭包和装饰器
本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...
- VQuery高级特性
VQuery高级特性 css方法 同时设置多个--for in 链式操作 链式操作 函数,链式操作 css 方法链式操作 json的使用 阻止冒泡,默认事件 VQuery插件 插件机制 可以扩展库的功 ...
随机推荐
- linux 进程管理相关内容
简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...
- CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...
- 玩转Windows Azure存储服务——网盘
存储服务是除了计算服务之外最重要的云服务之一.说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工 ...
- var 0bj = []声明报错的小问题
闲来无事,找了份javascript的习题来作作,结果第一题的答案就难住了,附原题: Javascript中, 以下哪条语句一定会产生运行错误? 答案( B ) A.var _变量=N ...
- dedecms调用标签总结(二)
6. 列表调用 首页: {dede:arclist row='10' titlelen='24' typeid='2' orderby='pubdate'} <li> <a href ...
- CleanBlog(个人博客+源码)
CleanBlog是一个高端(低调).大气(简洁)的个人博客系统,之前在网上看到了好多个人博客网站,感觉很酷的,自己也想搭建一个,最近 刚学完SSM(Spring/SpringMVC/MyBatis) ...
- POJ2230Watchcow[欧拉回路]
Watchcow Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7512 Accepted: 3290 Specia ...
- NOIP2000方格取数[DP]
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- 1.使用using释放资源
using语句有二个关键字 >>作为关键字,using可以导入命名空间 >>作为C#语句,using可以释放对象占用的内存资源 语法: using(SqlConnection ...
- 叫板OpenStack:用Docker实现私有云
看到各大厂商的云主机,会不会觉得高大上?目前大公司的主流方案是OpenStack,比如某个公司的私有云