介绍:

“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. WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序)

    原文:WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序) 通过<如何将一个服务发布成WSDL[编程篇]>的介绍我们知道了如何可以通过编程或者配 ...

  2. AV_百度百科

    AV_百度百科 AV(影片门类)

  3. [034] 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime(转)

    从微信公众平台的消息接口指南中能够看出,每种类型的消息定义中,都包括有CreateTime參数,它表示消息的创建时间,例如以下图所看到的: 上图是消息接口指南中4.1-文本消息的定义.注意Create ...

  4. 终于懂了:WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点 good

    程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #inc ...

  5. dedecms的安装以及为他配置虚拟主机

    一.概念: 1.CMS是:Content Manage System   内容管理系统 内容包括:商品,文章,软件,视频 2.当前市面上常用的CMS有哪些? DedeCMS: 织梦     中小型公司 ...

  6. [放松一下] 经典高清电影合集 170G BT种子下载

    经典高清电影合集 170G BT种子下载 点击文件名下载 经典高清电影合集170G BT种子.torrent 下载方法 经典高清电影合集详情见目录: 1. 杀手47 2. 这个杀手不太冷 3. 放牛班 ...

  7. Swift - 使用UISearchController实现带搜索栏的表格

    我原来写过一篇文章“Swift - 带结果列表的搜索条(UISearchDisplayController)的用法”,当时是使用UISearchDisplayController来实现带有搜索功能的列 ...

  8. 转:python idle 清屏问题的解决

    http://www.cnblogs.com/maybego/p/3234055.html python idle 清屏问题的解决 在学习和使用python的过程中,少不了要与python idle打 ...

  9. 8天玩转并行开发——第三天 plinq的使用

    原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...

  10. JAVA 操作 DBF 文件数据库

    1.依赖夹包 javadbf-[].4.1.jar jconn3.jar 2.添加属性文件 jdbc.properties jdbc.driverClassName=com.sybase.jdbc3. ...