概述

本篇博客主要解说lambda表达式,在这里将它的来龙去脉,主要是从托付,匿名函数这些方面过度讲的,当然,在讲托付和匿名函数的时候,主要是从Lambda的角度出发讲的,可能它们还具有其他的一些作用或用途,但这已不是本篇博客的重点了,好了接下来我们開始。

托付

概念

托付就是一个指针变量,一个存放一类方法的指针变量。

优点

托付给我们变成带来了什么优点呢?举个样例:BLL层里面有一个类A,一个类B,类A中有a方法,类B中有b方法,我们要想实现a方法中调用b方法,方式有两种。

一种是在a方法中直接调用b方法;还有一种是a方法直接调用托付x(看上面的托付定义),然后,在U层中,当我们使用A类的a方法时,再将B类的b方法赋值给托付x,从而达到a方法调用托付x(b方法)。

从这两种实现方式来说,另外一种方式更加的灵活,由于没有将b方法直接写死在a方法里,所以,之后的一些变动,我们不须要改动BLL层A类a方法里的代码了(假设里面的逻辑非常复杂,改动时非常危急和麻烦的),仅仅须要加入�一些类一些方法就能够了,直接在U层改动(变化必定会改动,这个无法改变,可是,怎么变动会更加简单非常重要),这样会使我们工作非常的简单。这个就是托付的一个优点。

匿名函数

匿名函数就是没有名称的函数,应用的场景就是,不须要函数重用,即:这个函数就用一次。举个样例说,U层使用A类的a方法时,直接给a方法传递一个匿名函数(a方法參数的定义时,须要使用托付),至于为什么给a方法传递一个匿名函数,由于a方法里须要调用这个匿名方法,须要用这些逻辑运算,而这些逻辑运算仅仅须要用一次,所以,传递一个匿名方法,这样就不用多此一举的再创建一个类,类里面在写上方法(刚刚的匿名方法),由于这样创建全然没有必要(就使用这么一次),假设这样创建一个多余的类的话,对于U层调用时,不方便代码的阅读,而是结构也是不易理解的。

Lambda表达式

Lambda表达式就是一个升级版的匿名函数,它的优点使代码变得阅读变得更加的easy,代码变得也更加的紧凑。使代码变得更加的紧凑是匿名函数解决的一个问题,Lambda表达式,再次基础上攻克了匿名函数的不便阅读问题。

实例

从Lambda表达式的发展历史上,我们解释了托付,匿名函数,接下了,我们就进行对应的Demo演示

托付和普通函数的比較

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function1
{public class class1{public string GetName1() {return "直接写死的方法";}public string GetName2() {return "通过托付实现";}}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function1
{//普通托付public delegate string MyDelegateClass();
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function1
{public class class3{         public string GetName(MyDelegateClass myEnTrustFunction) { return myEnTrustFunction();}public string GetName() {return new class1().GetName1();}}
}</span>

托付函数和托付匿名函数的比較

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function2
{public class class1{public string GetName1(MyDelegateClass myFunction) {return myFunction();}}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function2
{//普通托付public delegate string MyDelegateClass();
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function2
{public class class3{public string GetName() {return "托付函数";}}
}

托付匿名函数和托付Lambda表达式的比較

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function3
{//普通托付public delegate string MyDelegateClass();
}
<span style="font-family: 宋体;">using System;</span>
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace function3
{public class Class2{public string GetName(MyDelegateClass myFunction){return myFunction();}}
}

client代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace 学习.Lambda表达式
{class Program{static void Main(string[] args){#region 托付和普通函数的比較//function1.class3 fun1 = new function1.class3();//Console.WriteLine(fun1.GetName());//Console.WriteLine(fun1.GetName(new function1.class1().GetName2));#endregion#region 托付函数和托付匿名函数的比較//function2.class1 fClass1 = new function2.class1();//Console.WriteLine(fClass1.GetName1(new function2.class3().GetName));//Console.WriteLine(fClass1.GetName1(delegate() { return "匿名函数"; }));#endregion#region 托付匿名函数和托付lambda表达式的比較function3.Class2 class2 = new function3.Class2();Console.WriteLine(class2.GetName(delegate() { return "匿名函数"; }));class2.GetName(() => { return "Lambda表达式"; });#endregionConsole.Read();}}
}

总结

托付使代码变得更加的灵活,基类代码不再是死板的,避免了改动逻辑比較复杂的代码;匿名函数攻克了为只使用一次的方法的创建的复杂性,使代码变得更加的紧凑;Lambda表达式,具有了匿名函数的长处,同一时候攻克了匿名函数不便阅读的问题。

LinQ—Lambda表达式相关推荐

  1. Linq lambda表达式经验总结

    Linq有很多值得学习的地方,这里我们主要介绍Linq lambda表达式,包括介绍Expression tree等方面. Linq lambda表达式 了解过C# 3.0的新特性的话应该知道,在C# ...

  2. SQL、Linq和Lambda表达式 的关系

    首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...

  3. Db4o结合Linq、Lambda表达式的简单示例

    大多数人接触Db4o的查询,都是从"样本查询"(Query by Example)开始的,这种查询方式简单但不方便,功能和性能也很受局限.以下是引自官方的样本查询示例: // re ...

  4. Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式

    当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...

  5. 用c#算成绩的总和_C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

    前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...

  6. Linq、Lambda表达式详细总结(转)

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的 左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数 ...

  7. C#——《C#语言程序设计》实验报告——综合练习——委托、Lambda表达式、LINQ、接口

    问题描述 1.使用委托.Lambda表达式.LINQ等知识完成以下内容:(本题35分) (1)要求定义Employee类,带有Name属性(string类型),带有Birthday属性(DateTim ...

  8. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  9. Linq之Lambda表达式初步认识

    目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...

最新文章

  1. 贵州大学明德学院计算机有多少班级,2014年贵州大学明德学院算机科学及信息系电子信息工程专业介绍...
  2. 农业谋定投资-农业大健康·万祥军:解读胡春华补三农短板
  3. Ok6410挂载NFS
  4. spark学习-61-源代码:ShutdownHookManager虚拟机关闭钩子管理器
  5. (三)在Azure上创建您的第一个Kubernetes集群
  6. 如果一切需要重学,2014年应该学哪些技术?
  7. 考研数学各科的“命题潜规则”,看完多得好几分!(文末附汤家凤1800习题册重点题勾选)
  8. win10安装MySQL5.7教程,linux安装MySQL教程,SQLyog安装教程
  9. udhcpc 参数使用说明
  10. com.alibaba.datax.common.exception.DataXException: Code:[ESWriter-03]
  11. 百钱买小鸡/*公鸡5文钱1只,母鸡三文钱一只,小鸡一文钱三只。现在用100文钱共买了100只鸡,问这100只鸡中,公鸡,母鸡,小鸡各是多少只?
  12. 搭建hexo博客与yilia主题优化
  13. Android ijkplayer播放rtsp直播流
  14. 主动雷达和被动雷达的区别
  15. 【R语言数据科学】(十八):系统聚类和K-Means聚类
  16. 安卓机适合用的手机浏览器,可下载视频可锁屏
  17. 前端基础面试题(HTML + CSS)
  18. 「算法与数据结构」从入门到进阶吐血整理推荐书单
  19. 20201120翻译_disba基于Python的面波正演模拟程序包
  20. 用python提取不同的两列数据对比_比较两列数据fram中的值

热门文章

  1. 使用python读取kafka实时topic数据demo,包括安装kafka module
  2. PERL 使用IO::Socket::INET模块实现socket编程
  3. Bzoj3262 陌上花开
  4. linux之at,crontab
  5. Linux平台下卸载ORACLE
  6. Linux 命令(123)—— iostat 命令
  7. Linux 命令(60)—— strip 命令
  8. cockroachdb的一些网址信息
  9. jsp调用Python
  10. Merge into的使用详解-你Merge了没有【转】