C# 链式编程

链式编程能够将多个操作或者多行代码通过点号(.)链接在一起,方便修改和阅读。

诸如C#中的的Linkq语法

List<string> list = new List<string> { "a", "b", "c", "d" };
List<string> list2 = new List<string> { "a", "c" };

var result = list   .Select((a, b) => new { Value = a, Index = b })   .Where(x => list2.Any(d => d == x.Value))   .Select(c => c.Index)   .ToArray();

使用示例

以下示例通过制作一杯果汁的方式(加入白开水->加入香精->加入白糖->加入其他->制作完成)演示下传统写法和链式编程的写法下的区别,链式编程的关键在于方法的的返回值为this即返回对象本身,这样返回回来的结果可以一直点下去

using System;
using System.Collections.Generic;
using System.Text;

namespace ChainProgramming
{
    /// <summary>
    /// 制作果汁类
    /// </summary>
    public class JuiceCup : IJuiceCup
    {
        /// <summary>
        /// 加入白开水
        /// </summary>
        /// <returns></returns>
        public JuiceCup AddWater()
        {
            Console.WriteLine("加入白开水");
            return this;
        }

        /// <summary>
        /// 加入香精
        /// </summary>
        /// <returns></returns>
        public JuiceCup AddEssence()
        {
            Console.WriteLine("加入香精");
            return this;
        }

        /// <summary>
        /// 加入白糖
        /// </summary>
        /// <returns></returns>
        public JuiceCup AddSugar()
        {
            Console.WriteLine("加入白糖");
            return this;
        }

        /// <summary>
        /// 加入其他材料
        /// </summary>
        /// <returns></returns>
        public JuiceCup AddOthers()
        {
            Console.WriteLine("加入其他");
            return this;
        }

        /// <summary>
        /// 制作完成,此处返回值为void,这样的话这个方法只能位于最后,这个方法之后无法再点出其他方法
        /// </summary>
        public void Finish()
        {
            Console.WriteLine("制作完成");
        }
    }
}

入口函数示例如下

using System;
using System.Collections.Generic;
using System.Linq;

namespace ChainProgramming
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            //链式编程写法
            Console.WriteLine("链式编程写法");
            IJuiceCup juice1 = new JuiceCup();
            juice1
                .AddWater()
                .AddEssence()
                .AddSugar()
                .AddOthers()
                .Finish();

            //传统写法
            Console.WriteLine();
            Console.WriteLine("传统写法");
            IJuiceCup juice2 = new JuiceCup();
            juice2.AddWater();
            juice2.AddEssence();
            juice2.AddSugar();
            juice2.AddOthers();
            juice2.Finish();

            Console.ReadLine();
        }
    }
}

链式编程的写法和传统写法下的返回结果如下所示

 

posted @ 2022-03-20 17:52  说不出来  阅读(502)  评论(0编辑  收藏  举报