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插件 插件机制 可以扩展库的功 ...
随机推荐
- CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...
- 浅谈C++设计模式之抽象工厂(Abstract Factory)
抽象工厂(Abstract Factory)模式是为了提供一系列相关或相互依赖对象的接口.对象创建型模式的一种. 客户Client 抽象工厂接口AbstractFactory 抽象工厂的实现类Conc ...
- [转]AngularJS fixed header scrollable table directive
本文转自:http://pointblankdevelopment.com.au/blog/angularjs-fixed-header-scrollable-table-directive This ...
- 浅析Java中的访问权限控制
浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...
- ac自动机 模板
自己写的0.0 #include <queue> #include <cstring> #include <cstdio> using namespace std; ...
- 图的全局最小割的Stoer-Wagner算法及例题
Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...
- jQuery UI常用插件使用
一.什么是插件 ①是遵循一定接口规范编写的程序 ②是原有系统平台功能的扩展和补充 ③只能运行在规定的系统平台下,而不能单独运行 注:由于jQuery插件是基于jQuery脚本库的扩展,所以所有jQue ...
- PageContext
pageContext对象 pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它,所以知道request对象.response对象的人比较多,知道pageCo ...
- U-BOOT-Linux启动指令bootm分析
首先说一下uImage和zImage的区别 uImage是在zImage之前加上信息头.包含系统类型.是否压缩及压缩方式等 bootm命令只能启动uImage 幻数:说得再好听的名字也只不过是个0~0 ...
- 如何将matlab画出的图片保存为要求精度
· 来源:http://emuch.net/bbs/viewthread.php?tid=2705843 杂志社对投稿图片的分辨率通常有如下要求: TIFF: Colour or greyscale ...