Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值

using System;

namespace NewAttr
{
/// <summary>
/// Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
/// Lambda 表达式对于编写 LINQ 查询表达式特别有用。
/// </summary>
public class LambdaDemo
{
public LambdaDemo() { }
/// 委托不能重载,即委托名称相同,参数类型,个数不同。
/// 构造委托的时候,根本不管参数,当然也就不知道你要构造的是哪个委托。
private delegate int del(int x);
private delegate int del2(int x, int s);
private delegate void del3();
public static void Test()
{
del myDel1 = x => x * x;
del myDel2 = (x) => x * x;
del myDel3 = (x) => x * x;
del myDel4 = (int x) => x * x;
del myDel5 = (int x) => { return x * x; };
Console.WriteLine("del myDel1 = x => x * x :{0}", myDel1());
Console.WriteLine("del myDel2 = (x) => x * x :{0}", myDel2());
Console.WriteLine("del myDel3 = (x) => x * x :{0}", myDel3());
Console.WriteLine("del myDel4 = (int x) => x * x :{0}", myDel4());
Console.WriteLine("del muDel5 = (int x) =>{1}:{0}", myDel5(), " { return x * x; } ");
del3 myDel6 = () => Test2();
Console.WriteLine("--------------------------------");
myDel6();
} public static void Test2()
{
del2 myDel2 = (x, y) => x * y;
del2 myDel3 = (int x, int y) => x * y;
del2 myDel4 = (int x, int y) => { return x * y; };
Console.WriteLine("del2 myDel2 = (x, y) => x * y :{0}", myDel2(, ));
Console.WriteLine("del2 myDel3 = (int x, int y) => x * y :{0}", myDel3(, ));
Console.WriteLine("del2 myDel4 = (int x, int y) => {1} :{0}", myDel4(, ), "{ return x * y; }");
Console.WriteLine("--------------------------------");
FunTest();
} public static void FunTest()
{
///其中 Func 是最多具有十六个输入参数的任何一个 Func 委托
///之后一个为返回值。
///Func<TResult>,Func<T,TResult>,Func<T,.....T,TResult>
Func<int> myFunc = () => ;
Console.WriteLine("Func<int> myFunc = () => 1 :{0}", myFunc());
Func<int, string, int> myFunc2 = (x, y) => x + y.Length;
Console.WriteLine("Func<int, string, int> myFunc = (x, y) => x + y.Length :{0}", myFunc2(, "jasonhua")); ///其中 Action 是最多具有十六个输入参数的任何一个 Action 委托
Action myAction = () => { Console.WriteLine("Action myAction :1 * 1"); };
myAction();
Action<int, int> myAction2 = (x, y) => { Console.WriteLine("Action<int, int> myAction2 = (x, y) :{0}", x * y); };
myAction2(,);
}
}

其他的基础功能

1.  C#高级功能(四)扩展方法和索引

2. C#高级功能(三)Action、Func,Tuple

3. C#高级功能(二)LINQ 和Enumerable类

4. C#高级功能(一)Lambda 表达式

5. C#中泛型的解释(object,list,var,dynamic的区别)

6. C#中委托

7. C#和.NET版本对比

C#高级功能(一)Lambda 表达式的更多相关文章

  1. Java 高级特性: Lambda 表达式

    本文源代码上传到了码云,请点击 LambdaExpression 获取.Lambda 表达式是 java 8 的新特性,本文讲解了 lambda 表达式的所有知识.内容涉及到 lambda 表达式是什 ...

  2. 第十二篇 .NET高级技术之lambda表达式

    最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介 ...

  3. C#3.0新增功能08 Lambda 表达式

    连载目录    [已更新最新开发文章,点击查看详细] Lambda 表达式是作为对象处理的代码块(表达式或语句块). 它可作为参数传递给方法,也可通过方法调用返回. Lambda 表达式广泛用于: 将 ...

  4. Lambda表达式 简介 语法 示例

    Lambda 表达式也称为闭包,是匿名类的简短形式.Lambda 表达式简化了[单一抽象方法声明接口]的使用,因此 lambda 表达式也称为功能接口. 在 Java SE 7 中,单一方法接口可使用 ...

  5. 大数据之路week06--day03(jdk8新特性 Lambda表达式)

    为什么使用Lambda表达式?(做为初学者接触这个新的语法,会很懵逼,说道理,我在接触到这一块的时候,语法规则我看到了也很懵逼,因为这个和逻辑的关系不是很大,但就是作为一种新的语法出现,一时间很难接受 ...

  6. Java 学习笔记(11)——lambda 表达式

    在写Java代码的时候,如果某个地方需要一个接口的实现类,一般的做法是新定义一个实现类,并重写接口中的方法,在需要使用的时候new一个实现类对象使用,为了一个简单的接口或者说为了一个回调函数就得额外编 ...

  7. Kotlin——从无到有系列之高级篇(一):Lambda表达式

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 经过前面一系列对K ...

  8. 动态创建Lambda表达式实现高级查询

    需求简介 最近这几天做的东西总算是回归咱的老本行了,给投资管理项目做一个台账的东西,就是类似我们的报表.其 中有一个功能是一个高级查询的需求,在查询条件方面大概有7.8个查询条件.需求就是如果一个条件 ...

  9. C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

    1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...

随机推荐

  1. MS文件与路径的一些方法记录

    一,路径相关 String path1 = System.IO.Directory.GetCurrentDirectory(); MessageBox.Show("获取应用程序的当前工作目录 ...

  2. Hive基础之自定义封装hivefile命令

    存在的问题:当把hql写到shell中,不方便阅读:但把hql写到文件中,又传递不了参数:怎么办呢? 自定义hivefile 执行方式形如: 第一个参数为要执行的hql文件,后续的参数为要替换的key ...

  3. 在解决方案中所使用 NuGet 管理软件包依赖

    使用程序包恢复功能可以在提交源代码时, 不需要将代码库提交到源代码管理中,大幅减少项目的尺寸.所有NuGet程序包都存储在解决方案的Packages文件夹中. 要启用程序包恢复功能,可右键单击解决方案 ...

  4. python核心编程 第二天

    1.标准输入输出: import sys saveout=sys.stdout#保存当前输出状态 logfile=open('E://log.txt','r')# 打开文件 sys.stdout=lo ...

  5. Orchard官方文档翻译(六) 建立你的第一个Orchartd站点

    让我们开始 该主题内容已在Orchard1.8Release版本下测试通过. 这里通过向导式的教程来告诉大家Orchard的功能如何使用.如果你是第一次使用Orchard,该文档就是为你而准备的! O ...

  6. Android开发-API指南-<service>

    <service> 英文原文:http://developer.android.com/guide/topics/manifest/service-element.html 采集(更新)日 ...

  7. Laxcus大数据管理系统2.0(8)- 第六章 网络通信

    第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的 ...

  8. 【LeetCode】19. Remove Nth Node From End of List

    题目: 思路:如果链表为空或者n小于1,直接返回即可,否则,让链表从头走到尾,每移动一步,让n减1. 1.链表1->2->3,n=4,不存在倒数第四个节点,返回整个链表 扫过的节点依次:1 ...

  9. UVa11210 中国麻将 Chinese Mahjong-搜索

    https://vjudge.net/problem/UVA-11210 //被水题虐了一上午... #include<iostream> #include<cstdio> # ...

  10. MULTIBYTETOWIDECHAR的与WIDECHARTOMULTIBYTE的参数详解及相互转换

    第一个就是宽字符到多字节字符转换函数,函数原型如下: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideChar ...