Lambda与委托
Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。
通过使用 lambda 表达式,可以可作为参数 或 返回为函数调用值的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to) 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,
lambda 表达式 x => x * x
指定名为 x 的参数并返回 x 的平方。
您可以按照以下示例将此表达式分配给委托类型:
namespace Lambda
{
class Program
{
delegate int del(int intput);
static void Main(string[] args)
{
del myDelegate = x => (x * x);
Console.WriteLine(myDelegate());//
}
}
}
Lambda 表达式
表达式在右边的 Lambda 表达式称为“Lambda 表达式”。 Lambda 表达式返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
注:只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。
两个或更多输入参数由括在括号中的逗号分隔:
(x, y) => x == y
有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:
(int x, string s) => s.Length > x
使用空括号指定零个输入参数:
() => SomeMethod()
Lambda 语句
Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:
(input parameters) => {statement;}
class Program
{
delegate void TestDelegate(string s);
static void Main(string[] args)
{
TestDelegate myDel = n =>
{
string s = n + "....";
Console.WriteLine(s);
};
myDel("Ca!");
}
}
1. 完整的委托
namespace Lambda
{
class Program
{
delegate string Del(string name); static string sayHi(string name)
{
return "Hi " + name;
}
static void Main(string[] args)
{
Del say = new Del(sayHi);
Console.WriteLine(sayHi("完整委托"));
}
}
}
2.升级版本--匿名方法
namespace Lambda
{
class Program
{
delegate string Del(string name);
static void Main(string[] args)
{
Del sayHi = delegate(string name) { return "Hi " + name; };
Console.WriteLine(sayHi("匿名方法"));
}
}
}
3.升级版本Lambda表达式
namespace Lambda
{
class Program
{
delegate string Del(string name);
static void Main(string[] args)
{
Del sayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi("Lambda表达式"));
}
}
}
4.委托替代--Func 委托 有参数有返回值
namespace Lambda
{
class Program
{
static void Main(string[] args)
{
Func<string, string> sayHi = delegate(string name) { return "Hi " + name; };
Func<string, string> SayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi(" Func<string, string>匿名委托"));
Console.WriteLine(SayHi(" Func<string, string>Lambda委托"));
}
}
}
5.委托替代--Action 委托 有参数无返回值
namespace Lambda
{
class Program
{
static void Main(string[] args)
{
Action<string> sayHi = delegate(string name)
{
Console.WriteLine("Hi " + name);
};
Action<string> SayHi = name => Console.WriteLine("Hi " + name);
sayHi("Action<string> sayHi匿名委托");
SayHi("Action<string> SayHi Lambda委托");
}
}
}
参考:
用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
Lambda与委托的更多相关文章
- lambda和委托
Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...
- lambda和委托那点事
Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...
- C#利用lambda实现委托事件的挂接
转自:http://www.cdtarena.com/cpx/201307/9287.html在写一个小程序的时候,碰到了这样的问题,需要用委托来挂接事件,但是又想在这事件中使用局部的变量,而委托一旦 ...
- LINQ、Lambda与委托
首先定义个Person类: public class Person { public string Name{get;set;} //姓名 public int Age{get;set;} //年龄 ...
- C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别
以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...
- 基础知识---委托和 lambda
委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...
- ASP.NET MVC学前篇之Lambda表达式、依赖倒置
ASP.NET MVC学前篇之Lambda表达式.依赖倒置 前言 随着上篇文章的阅读,可能有的朋友会有疑问,比如(A.Method(xxx=>xx>yy);)类似于这样的函数调用语句,里面 ...
- C#中委托演变的的三个阶段
命名函数 匿名方法 lambda表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...
随机推荐
- 一行代码实现Okhttp,Retrofit,Glide下载上传进度监听
https://mp.weixin.qq.com/s/bopDUFMB7EiK-MhLc3KDXQ essyan 鸿洋 2017-06-29 本文作者 本文由jessyan投稿. jessyan的博客 ...
- day5模块学习--hashlib模块
hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- USACO 5.4 Canada Tour
Canada Tour You have won a contest sponsored by an airline. The prize is a ticket to travel around C ...
- 构建第一个Spring Boot项目
1.启动IntelliJ IDEA,点击"Create New Project"  2.选择"Spring initializr",设定SDK及Spring ...
- python脚本获取本机公网ip
1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...
- SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping初始化
RequestMappingHandlerMapping ,用于注解@Controller,@RequestMapping来定义controller. @Controller @RequestMapp ...
- BigDecimal 两种方式
第一种: Double a=0.06; Double b=0.01; BigDecimal addend = BigDecimal.valueOf(a); BigDecimal augend = Bi ...
- LCD
<LCD硬件体系结构> LCD控制器:位于ARM核内部,为LCD提供需要显示的数据,控制信息,控制时序 <LCD控制器结构> REGBANKK : 寄存器组,总共有17个寄存器 ...
- 使用SoapUI测试windows身份验证的webservice
有个朋友问到用soapui测试wcf服务时如果使用windows身份验证要怎么传输凭据,于是自己试了一下.其实服务端是wcf还是webservice还是webapi都无所谓,关键是windows身份验 ...
- Qt Quick快速入门之线程基础
首先必须明确的是,Qt中的线程使用是相对复杂的,并不像C#中那么随意,特别是结合串口.网络编程等,使用时稍有不慎就会出问题,然后Qt里面经常出了问题就直接崩溃(这个真是谁用谁知道),所以如果在功能上用 ...