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表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...
随机推荐
- 【58沈剑架构系列】RPC-client异步收发核心细节?
第一章聊了[“为什么要进行服务化,服务化究竟解决什么问题”] 第二章聊了[“微服务的服务粒度选型”] 第三章聊了[“为什么说要搞定微服务架构,先搞定RPC框架?”] 上一章聊了[“微服务架构之RPC- ...
- keras Variable set_value错误解决
问题: 如: from keras import backend as K varib = K.variable(0.) new_value = np.min([0.1, 1.0]) varib.se ...
- jenkins远程连接linux配置测试
由于配置原因造成一下错误错误: jenkins.plugins.publish_over.BapPublisherException: Failed to connect session for co ...
- Dubbo中多协议
Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议 1.不同服务不同协议配置 不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议 & ...
- 不定期更新的IDEA功能整理
目录 不定期更新的IDEA功能整理 idea 命令 Preferences 和 Project Structure Keymap HTTP Proxy Postfix Completion 插件 插件 ...
- redis 发布/订阅 模式
发布/订阅模式的命令如下: * 进入发布订阅模式的客户端,不能执行除发布订阅模式以上命令的其他命令,否则出错.
- Initializing the FallBack certificate failed . TDSSNIClient initialization failed
安装SQL后服务不能启动,报错: 2014-03-24 14:33:10.06 spid13s Error: 17190, Severity: 16, State: 1.2014-03-24 ...
- 1024 Palindromic Number (25)(25 point(s))
problem A number that will be the same when it is written forwards or backwards is known as a Palind ...
- android 视频 2017
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
- springboot配置多数据源mongodb
参考大佬的文章 https://juejin.im/entry/5ab304dd51882555825241b3