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表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...
随机推荐
- bzoj 2756
2756 思路: 二分讨论,网络流检验: 代码: #include <bits/stdc++.h> using namespace std; #define INF 1e16 #defin ...
- python处理汉字转拼音pypinyin
主要是pypinyin 包,官网: http://pypinyin.readthedocs.io/zh_CN/master/index.html jieba包,主要是用来分词的,我之前的博文有介绍:h ...
- 同时装有py2 和3,运行scrapy如何区分
1未区分环境 python2 -m scrapy startproject xxx python3 -m scrapy startproject xxx 当然,执行的时候也是 python2 -m s ...
- Bridge 桥接
意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 动机 当一个抽象可能有多个实现时,通常用继承来协调它们.抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现.但是此方法有时不够灵活 ...
- Jersey入门三:创建一个JavaEE的Web项目
1.在终端中输入如下命令,创建一个名为的simple-service-webapp项目: mvn archetype:generate -DarchetypeArtifactId=jersey-qui ...
- Scala入门2(特质与叠加在一起的特质)
一.介绍 参考http://luchunli.blog.51cto.com/2368057/1705025 我们知道,如果几个类有某些共通的方法或者字段,那么从它们多重继承时,就会出现麻烦.所以Jav ...
- 快递鸟电子面单打印功能基于java
之前的后天管理系统的电子面单打印使用的是灵通打单. 使用相对比较麻烦,需要到处Excel之后再导入,麻烦. 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题. 不难是不难,但是遇 ...
- POJ 3254 & POJ 1185(状压DP入门)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16773 Accepted: 8860 Desc ...
- [leetcode DP]72. Edit Distance
计算最少用多少不把word1变为word2, 思路:建立一个dp表,行为word1的长度,宽为word2的长度 1.边界条件,dp[i][0] = i,dp[0][j]=j 2.最优子问题,考虑已经知 ...
- C# CuttingEdge.Conditions 验证帮助类库 文档翻译
项目主页: https://archive.codeplex.com/?p=conditions 作者博客关于项目的文档(翻译原文): https://www.cuttingedge.it/blogs ...