`
zxlyecf2
  • 浏览: 133456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c# 链式编程

    博客分类:
  • C#
阅读更多

先写一段代码,让大家了解或重温一下什么是链式编程:

/// <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"); }
        }

 

3
0
分享到:
评论

相关推荐

    接口和链式编程

    在C#编程中,接口和链式编程是两个重要的概念,它们在软件设计和实现中起着关键作用。本文将详细探讨这两个主题,并结合实际应用,如“接口测试小程序”的开发,来阐述如何使用C#的接口和链式编程。 首先,让我们...

    Visual C#高级编程范例

    《Visual C#高级编程范例》是一本专为有经验的C#开发者设计的书籍,旨在深入探讨C#语言的高级特性和最佳实践。通过一系列精心设计的编程范例,本书将引导读者掌握如何利用C#的强大功能来解决实际开发中的复杂问题。...

    实例讲解C#中的职责链模式

    大家好,欢迎来到老胡的博客,今天我们继续了解设计模式中的职责链模式,这是一个比较简单的模式。跟往常一样,我们还是从一个真实世界的例子入手,这样大家也对这个模式的应用场景有更深刻的理解。...

    深入.NET平台和C#编程.NET平台和C#编程4~9章PPT课件

    这些文件名暗示了这是一系列关于深入学习.NET平台和C#编程的PPT课件,涵盖了从第四章到第九章的内容。在这个主题下,我们可以探讨许多关键知识点,包括.NET框架的基础、C#语言特性、面向对象编程、内存管理、异常...

    C#编程小方法汇总及相关代码

    在C#编程中,开发者经常会遇到各种各样的问题和挑战,需要掌握一些实用的小方法来提高效率和代码质量。以下是一些关键知识点的详细说明,它们涵盖了C#的基础语法、数据库连接以及常用的UI控件使用。 1. **基础语法...

    C#编写栈的链式存储程序

    在C#中,我们可以使用多种方式来实现栈,其中链式存储是一种常见且灵活的方法。下面我们将深入探讨如何使用C#编写链式存储的栈,并通过`LinkedStackTest`这个例子来理解其实现细节。 首先,栈的基本操作包括压入...

    求最长路径的C#代码

    在C#编程中,求解一个连通图的最长路径是一项常见的任务,特别是在项目管理、网络分析或游戏设计等领域。最长路径问题是一个经典的图论问题,它可以被看作是寻找从源节点到目标节点的最大权重路径。在这个场景下,...

    数据结构链式表

    数据结构链式表是计算机科学中的基础概念,它在编程领域有着广泛的应用。本文将深入探讨链式表的原理、实现以及在C#语言中的应用,以VS2008开发环境为例,涵盖单链表、循环链表和双链表。 首先,链式表是一种动态...

    C#_函数手册大全+c#公共函数

    在C#编程语言中,函数是程序的基本构造块,它们封装了特定的代码逻辑,可以被多次调用,以执行相同或类似的任务。本资源包含了"C#_函数手册大全+c#公共函数",旨在为开发者提供全面的C#函数参考资料。下面我们将详细...

    提高C#编程水平的50个要点

    ### 提高C#编程水平的50个要点详解 #### 1. 总是用属性(Property)来代替可访问的数据成员 - **解释**:在C#中,属性提供了一种更加灵活的方式来读取、写入或计算私有字段的值。属性可以使得类的行为更加像内置类型...

    c#可变数组 快来下

    在C#编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的数据集合。在C#中,数组有多种类型,其中一种是可变数组,也被称为动态数组或可重新调整大小的数组,主要由`ArrayList`和`List&lt;T&gt;`类代表。...

    [Csharp高级编程(第6版)]10章集合、11章LINQ

    ### C#高级编程(第6版):第十章 集合 #### 1. 集合的基础概念 在C#中,集合是用于存储、检索和操作数据的一种非常强大的方式。它允许程序员根据需求选择最合适的数据结构来管理数据。集合在C#中的重要性不言而喻...

    Effective c#中文版

    32. **理解并应用流式编程**:通过链式调用方法,构建出一种流畅的代码风格,例如System.Linq的Enumerable扩展方法。 33. **利用AsyncStateMachineAttribute优化异步代码**:此特性帮助编译器优化异步方法的生成,...

    C#编写的BP算法

    在C#编程环境下实现BP算法,可以用于解决各种复杂的数据预测问题。 C#是一种面向对象的编程语言,它提供了丰富的库和工具,如.NET框架,使得开发神经网络模型变得更加便捷。在C#中,我们可以利用类和对象来构建神经...

    细细品味C#(Timer及多线程编程).pdf

    在.NET框架中,C#是一种广泛使用的编程语言,尤其在Windows应用开发中。本文将深入探讨C#中的Timer控件以及多线程编程,这两部分是构建高效、响应迅速的应用程序的关键技术。 Timer控件是C#中一个非常实用的组件,...

    c# 操作工具类-好用的类库

    在C#编程中,工具类(Utility Class)是一种常见的设计模式,它封装了一系列静态方法,为其他类提供通用的功能。这些功能通常不依赖于任何特定的实例,而是为整个应用程序提供服务。本篇文章将深入探讨如何创建和...

    用c#写的关键路径算法

    在C#编程中,关键路径算法(Critical Path Method, CPM)是一种用于项目管理的技术,它可以帮助确定项目中哪些任务是关键的,即任何延迟都会导致整个项目延期的任务。以下是一个使用C#实现的关键路径算法的基本框架...

Global site tag (gtag.js) - Google Analytics