介绍:

“Lambda表达式”(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用于创建托付或表达式文件夹树类型。

怎样创建

格式:( 形參列表 ) => { 函数体 }

若要创建 Lambda表达式,须要在
Lambda运算符=>左側指定输入參数(假设有),然后在还有一側输入表达式或语句块。比如,lambda表达式
x => x * x指定名为 x的參数并返回 x的平方值。如以下的演示样例所看到的,你能够将此表达式分配给托付类型:

delegate int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x *x;
int j = myDelegate(5); //j = 25
}

注意:函数体多于一条语句的可用大括号括起。

以上函数体也能够写成

del myDelegate = x => { return x * x;};

使用 Lambda表达式

=> 运算符具有与赋值运算符 (=) 同样的优先级而且是右结合运算

仅当 lambda 仅仅有一个输入參数时,括号才是可选的;否则括号是必需的。括号内的两个或很多其它输入參数使用逗号加以分隔:

(x,y) => x == y

使用Lamdba语句

语句 lambda 与表达式 lambda 表达式类似,仅仅是语句括在大括号里:

delegatevoid TestDelegate(string s);

TestDelegatemyDel = n => { string s = n + " " + "World";Console.WriteLine(s); }; myDel("Hello");

代码中怎样利用Lamdba

Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如Where)的參数。參数是托付类型System.Func<T, TResult>。
使用 Lambda 表达式创建该托付最为方便。

看实例

 public delegate TResult Func<TArg0, TResult>(TArg0 arg0)

能够将托付实例化为 Func<int,bool> myFunc,当中 int是输入參数,bool 是返回值。 返回值始终在最后一个类型參数中指定。 Func<int, string, bool>定义包括两个输入參数(int 和 string)且返回类型为
bool 的托付。 当调用以下的 Func 托付时,该托付将返回 true 或 false以指示输入參数是否等于 5:

Func<int,bool> myFunc = x => x == 5;
boolresult = myFunc(4); // returns false of course
//项目中用到的一个小样例
public CommodityCollection Load(string type)
{ return this.Load(p =>
{
p.AppendItem("Code",type);
});
}

return中的load方法实际上是一个具有泛型的托付,p为继承实现了SqlClauseBuilderUW的方法

[Serializable]
public abstract class SqlClauseBuilderUW : SqlClauseBuilderIUW
{
protected SqlClauseBuilderUW(); public SqlClauseBuilderUW AppendItem<T>(string dataField, T data, string op, string template);
public SqlClauseBuilderUW AppendItem<T>(string dataField, T data, string op, string template, bool isExpression);
protected override SqlClauseBuilderItemBase CreateBuilderItem();
}
public TCollection Load(Action<WhereSqlClauseBuilder> whereAction);
namespaceSystem
{
// 摘要:
// 封装一个方法,该方法仅仅有一个參数而且不返回值。
//
// 參数:
// obj:
// 此托付封装的方法的參数。
//
// 类型參数:
// T:
// 此托付封装的方法的參数类型。
public delegate void Action<in T>(T obj);
}

小结:



综合应用能够看出Lamdba能够简化查询的方法,而且在Linq的使用中多与泛型托付,枚举的where方法结合使用。是查询方式简化了非常多,可是内部构造却与匿名函数同样的.也是刚刚接触了解,不足之处还请谅解。

c#Lamdba表达式与托付的更多相关文章

  1. Java8 Lamdba表达式 001

    在一个已经存在的编程语言里非常少有对现有的生态系统起重大影响的新特性.Lambda表达式对于Java语言就是这样的意义的存在.简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能.提供了一 ...

  2. C#3.0 Lamdba表达式与表达式树

    Lamdba表达式与表达式树 Lamdba表达式 C#2.0中的匿名方法使得创建委托变得简单起来,甚至想不到还有什么方式可以更加的简化,而C#3.0中的lamdba则给了我们答案. lamdba的行为 ...

  3. java8中对lamdba表达式方法参数传递时,方法重载之后的类型推断

    java8中可以向方法传递一个lamdba表达式,今天看书关于类型推断碰到一个问题: 这个问题我实际操作了一下:得出结论 如果是只有一个方法的情况下,方法参数使用lamdba表达式的时候是不需要写类型 ...

  4. C#高级编程9-第8章 委托、lamdba表达式和事件

    委托.lamdba表达式和事件 1.引用方法 函数指针是一个指向内存位置的指针,不是类型安全的.无法判断实际指向.参数和返回类型也无从知晓..NET委托是类型安全的.定义了返回类型和参数类型,不仅包含 ...

  5. Java8 Lamdba表达式 002

    本篇将讲述lamdba表达式的排序,本例包括一个Player对象的集合[稍后定义],通过每一个player的分数高低对列表的player进行排序.类定义001例如以下 public class Sor ...

  6. Java8 新特性 Lamdba表达式

    Lamdba 表达式为什么出现   Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...

  7. Lamdba表达式的代码使用讲解

    public class Lambda{ public static void main(String[] args) { repeat(10, (i)->System.out.print(&q ...

  8. Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询

    在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...

  9. 第8章 委托、Lamdba表达式和事件

    本章内容: 委托    Lambda表达式 事件 8.1.3   简单的委托示例 首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作. public cl ...

随机推荐

  1. ESRI Shapefiles (SHP)

    ESRI Shapefiles (SHP) Also known as ESRI ArcView Shapefiles or ESRI Shapefiles. ESRI is the company ...

  2. 编译kernel:配置

    韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第10课第2节 内核启动流程分析之配置.WMV 下面以DM9000的配置为例: 在一个编译好的内核代码里,寻找CONFIG_DM900 ...

  3. Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决

    使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...

  4. ASP.NET利用byte检测上传图片安全

    ) { //这里只测试上传第一张图片file[0] HttpPostedFile file0 = Request.Files[]; //转换成byte,读取图片MIME类型 Stream stream ...

  5. fullcalendar日历控件知识点集合

    1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方 ...

  6. 杂题_POJ上的过桥问题

    本文出自:http://blog.csdn.net/svitter 过桥问题解释:一条船能够坐两个人,可是有非常多人要过河,所以送过一个人去,还有一个人还要回来接.使全部人过河之后时间最短,怎样求? ...

  7. perl 循环类选择器 ,爬取内容

    jrhmpt01:/root/lwp/0526# cat 0526.txt <div class="TXD_sy_title"><span class=" ...

  8. 基于visual Studio2013解决C语言竞赛题之1064互质数差1验证

       题目 解决代码及点评 /* 64. 任意两个互质的自然数, 经过若干次加减后,总可获得结果为1的数值. 所谓互质数(即互素的数),是指这两个数除 1外再没有其它公因数. 如14,9为 ...

  9. 为什么要用BitSet

    BitSet适用于一类型boolean判断,Java的BitSet在这类型判断中非常高效. 举例说明:在判断前2000万数字中素数个数的程序中,如果使用最基本的素数判断代码: package com; ...

  10. python 站点爬虫 下载在线盗墓笔记小说到本地的脚本

    近期闲着没事想看小说,找到一个全是南派三叔的小说的站点,决定都下载下来看看,于是动手,在非常多QQ群里高手的帮助下(本人正則表達式非常烂.程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本 须 ...