先写一段代码,让大家了解或重温一下什么是链式编程:
/// <summary> /// EntityFramwork中的链式编程示例 /// </summary> private void Example1() { using (NorthwindEFEntities northwindEFEntities = new NorthwindEFEntities()) { northwindEFEntities.Employees .Where(e => e.FirstName.StartsWith("C")) .Select(e => e.FirstName) .OrderBy(s => s); } }
这一个基本的查询,执行了三个操作:1.查找FristName以C开头的员工;2.取员工的FirstName;3.将名字排序。
EF中只需要一个语句,通过.将三者链成一个语句。后面还可以链接更多的语句,如果需要。
下面代码作一些演化:
/// <summary> /// 链式编程示例2 /// </summary> private static void Example2() { Person person = new Person { Name = "Tom" } .Run() .Sing() .Swim(); } class Person { public string Name { get; set; } public Person Run() { Console.WriteLine("Run"); return this; } public Person Swim() { Console.WriteLine("Swim"); return this; } public Person Sing() { Console.WriteLine("Sing"); return this; } }
这段代码定义了Peoson类,有三个操作Run、Swim、Sing,操作完成后返回自身this(有返回值是链式编程的关键)。返回自身this好比说执行完操作先别走人,还(可能)有其它操作要去做,如Example2中:先造一个People,先命令ta跑步,跑完先别休息再唱歌,再游泳,游泳完OK了。
链式编程是将多个操作(多行代码)通过点号"."链接在一起成为一句代码。(定义不严密,表达能力好的请给修正一下)
以下为常规代码与链式代码的比较:
/// <summary> /// 链式编程示例3 对比 /// </summary> private void Example3() { //链式代码 Person person = new Person { Name = "Tom" } .Run() .Sing() .Swim() .Run() .Sing() .Swim(); //常规代码 Person person2 = new Person(); person2.Run(); person2.Sing(); person2.Swim(); person2.Run(); person2.Sing(); person2.Swim(); }
为了增强效果,都执行了两轮操作。个人感觉链式代码更加精炼简洁易读。
链式代码要求操作有返回值,但对于很多操作大都是void型,什么也不返回,这样就很难链起来了。当然也有解决办法,可能不太优雅。
本人使用扩展方法解决这个问题,首先引入一个泛型扩展:
/// <summary> /// 先执行操作,再返回自身 /// </summary> public static T Do<T>(this T t, Action<T> action) { action(t); return t; }
下面是调用示例,其中Student类操作都是void型的。
/// <summary> /// 链式编程示例4 /// </summary> private static void Example4() { new Student { Name = "Tom" } .Do(s => s.Run()) .Do(s => s.Sing()) .Do(s => s.Sing()) .Do(s => s.Name = "Bob"); } public class Student { public string Name { get; set; } public void Run() { Console.WriteLine("Run"); } public void Swim() { Console.WriteLine("Swim"); } public void Sing() { Console.WriteLine("Sing"); } }
相关推荐
C#链式编程示例主要给大家介绍了关于C#管道式编程的介绍与实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值
C#开发接口测试小程序 继承 COMMDAL BASEBLL 泛型
大家好,欢迎来到老胡的博客,今天我们继续了解设计模式中的职责链模式,这是一个比较简单的模式。跟往常一样,我们还是从一个真实世界的例子入手,这样大家也对这个模式的应用场景有更深刻的理解。...
1、已知一线段AB,在某个方向选择一点P,输入距离d,求线段AB延长距离d后的点坐标; 2、判断两线段是否相交; ...8、编写链式编码程序实现栅格数据的压缩; 9、编程:用垂距法实现矢量数据的压缩。
这是C#版的数据结构与算法的代码实现,包括:顺序表,单链表,双链表;顺序栈,链栈;顺序队列,链队列;顺序串;用数组进行特殊矩阵的存储,稀疏矩阵的存储;顺序存储二叉树,链式存储二叉树,哈夫曼树;多重链表...
Expression自定义生成SQL,可链表、分组、排序、自定义。...对象化操作,链式编程,支持多表复杂关联查询,任意组装sql,自动生成表别名,参数化赋值,防止sql注入,支持SQLServer、MySQL、Oracle、SQLite等多数据库
1.4.2 泛型编程.........................13 本章小结........20 习题一............20 第2章线性表.....................................22 2.1 线性表的逻辑结构.........................22 2.1.1 线性表的定义....
1.4.2 泛型编程.........................................................................................................13 本章小结........................................................................
1.4.2 泛型编程.........................................................................................................13 本章小结.........................................................................
1.4.2 泛型编程.........................................................................................................13 本章小结.........................................................................
1.4.2 泛型编程.........................................................................................................13 本章小结.........................................................................
1.4.2 泛型编程.........................................................................................................13 本章小结.......................................................................
1、数据集合操作支持.net2.0的链式编程体验(此部分现已迁移完毕)。 * 链式编程的核心思想是想到什么就点什么,程序书写思路更流畅。但要注意的是不要把程序写成一行,对于带参数的函数调用,最好是一行一个点,...
1.4.2 泛型编程.........................................................................................................13 本章小结.........................................................................
1.4.2 泛型编程.........................................................................................................13 本章小结........................................................................
C#是一种通用的编程语言,由微软公司开发和推出,并广泛应用于Windows操作系统和.NET Framework开发中。它是一种面向对象的语言,拥有强大的类型检查和丰富的库支持。 LINQ(Language Integrated Query)是一种查询...
HTML基础加强、css(包含Div+CSS布局)、JavaScript、Dom(事件、window...链式编程、id选择器、tag选择器、CSS选择器、层次选择器、表单选择器、过滤选择器、复合选择器、节点导航、节点操作、样式操作、事件、动画、...