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与委托的更多相关文章

  1. lambda和委托

    Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...

  2. lambda和委托那点事

    Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...

  3. C#利用lambda实现委托事件的挂接

    转自:http://www.cdtarena.com/cpx/201307/9287.html在写一个小程序的时候,碰到了这样的问题,需要用委托来挂接事件,但是又想在这事件中使用局部的变量,而委托一旦 ...

  4. LINQ、Lambda与委托

    首先定义个Person类: public class Person { public string Name{get;set;} //姓名 public int Age{get;set;} //年龄 ...

  5. C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别

    以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...

  6. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992   版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...

  7. 基础知识---委托和 lambda

    委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...

  8. ASP.NET MVC学前篇之Lambda表达式、依赖倒置

    ASP.NET MVC学前篇之Lambda表达式.依赖倒置 前言 随着上篇文章的阅读,可能有的朋友会有疑问,比如(A.Method(xxx=>xx>yy);)类似于这样的函数调用语句,里面 ...

  9. C#中委托演变的的三个阶段

    命名函数 匿名方法 lambda表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...

随机推荐

  1. #JS Ajax的error函数

    使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理, 一般error函数返回的参数有三个: function(jqXHR jqXHR, String ...

  2. Android中Xposed框架篇-微信实现本地视频发布到朋友圈功能

    微信非常庞大,还好有一些强大的工具,下面就来总结收获的知识. 一.使用adb shell dumpsys activity top命令快速定位页面 二.使用Jadx进行方法跟踪时候如果发现没有结果,可 ...

  3. 在PHP中gmtime()与time()区别

    localtime是把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间.2.说明:此函数获得的tm结构体的时间是日历 ...

  4. TradingView 自定义指标

    TradingView 支持自定义指标,不过是把你要定义的指标写成一个 JS 源文件(customIndex.js),放在图表库 static 文件夹下.自定义指标 JS 源代码模板如下: __cus ...

  5. 不可不说的Java“锁”事

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...

  6. ARM Linux 驱动Input子系统之按键驱动测试

    上一篇已经谈过,在现内核的中引入设备树之后对于内核驱动的编写,主要集中在硬件接口的配置上了即xxxx.dts文件的编写. 在自己的开发板上移植按键驱动: 1.根据开发板的原理图 确定按键的硬件接口为: ...

  7. CXF发布webservice

    http://wenku.baidu.com/link?url=dTJpXcL0TXslGAYYC6SSOrPGvjyEb974ZGx9-0dymU32YDjxuP8DwlI1sFpPCGqu_ywW ...

  8. c++ 时间相关的类型

    关于时间转换可以参考以下博客: https://www.jianshu.com/p/80de04b41c31 https://www.cnblogs.com/qicosmos/p/3642712.ht ...

  9. 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)

    题目链接 随机化 暴力: 随便从一个点开始DFS,每次从之前得到的f[i]最大的子节点开始DFS.f[i]为从i开始(之前)能得到的最大答案. 要注意的是f[i]应当有机会从更小的答案更新, 9.10 ...

  10. SLF4J versions 1.4.0 and later requires log4j 1.2.12 or later 终极解决

    http://blog.sina.com.cn/s/blog_54eb26870100uynj.html 到SLF4J官方网站:http://www.slf4j.org/codes.html#log4 ...