在Dotnet开发过程中,Concat作为IEnumerable的扩展方法,十分常用。本文对Concat方法的关键源码进行简要分析

假如我们有这样的两个集合,我们需要把两个集合进行连接!

List<string> lst = new List<string> { "张三", "李四" };
List<string> lst2 = new List<string> { "王麻子" };

不使用Linq

   private List<string> Concat(List<string> first, List<string> second){if (first == null){throw new Exception("first is null");}if (second == null){throw new Exception("second is null");}List<string> lstAll = new List<string>();foreach (var item in first){lstAll.Add(item);}foreach (var item in second){lstAll.Add(item);}return lstAll;}

使用Linq

lst.Concat(lst2);

public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)

参数
first 要连接的第一个序列。
second 要连接的第二个序列。
返回值
IEnumerable< TSource > 一个包含两个输入序列的连接元素的 IEnumerable< T>。
此方法通过使用延迟执行来实现,因为IEnumerable是延迟加载的,每次访问的时候才取值。所以我们在返回数据时需要使用yield  所以我们可通过使用 foreach 语句从迭代器方法返回的序列。foreach 循环的每次迭代都会调用迭代器方法。迭代器方法运行到 yield return 语句时,会返回一个 expression,并保留当前在代码中的位置。下次调用迭代器函数时,将从该位置重新开始执行。
  
源码:

 public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second){if (first == null){throw new Exception("first is null");}if (second == null){throw new Exception("second is null");}foreach (TSource item in first){yield return item;}foreach (TSource item2 in second){yield return item2;}}
using System.Collections.Generic;
using System.Linq;
using System;public class Demo {public static void Main() {//两个列表var list1 = new List<int>{12, 40};var list2 = new List<int>{98, 122, 199, 230};//concat-var res = list1.Concat(list2);foreach(int i in res) {Console.WriteLine(i);}}
}        

String.Concat字符串连接函数

String.Concat (Object)

创建指定对象的 String 表示形式。

String.Concat (Object[])

连接指定 Object 数组中的元素的 String 表示形式。

String.Concat (String[])

连接指定的 String 数组的元素。

String.Concat (Object, Object)

连接两个指定对象的 String 表示形式。

String.Concat (String, String)

连接 String 的两个指定实例。

String.Concat (Object, Object, Object)

连接三个指定对象的 String 表示形式。

String.Concat (String, String, String)

连接 String 的三个指定实例。

String.Concat (Object, Object, Object, Object)

将四个指定对象的 String 表示形式与可选变量长度参数列表中指定的任何对象串联起来。

String.Concat (String, String, String, String)

连接 String 的四个指定实例。 由 .NET Compact Framework 支持。

该文章知识作为个人笔记,大部分知识来源于书本或网络整理总结;

Concat源码解析C#相关推荐

  1. 谷歌BERT预训练源码解析(二):模型构建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...

  2. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  3. 【原创】jQuery1.8.2源码解析之jQuery.event

    本片随笔主要是分析了下jQuery的事件模型,即如何统一事件对象,以及处理过程. 这里简要说明一下几点: jQuery通过统一的方法(第62行),eventHandle函数进行事件的分发,利用jQue ...

  4. jquery源码解析:代码结构分析

    本系列是针对jquery2.0.3版本进行的讲解.此版本不支持IE8及以下版本. (function(){ (21, 94)     定义了一些变量和函数,   jQuery = function() ...

  5. Spring Session源码解析

    AbstractHttpSessionApplicationInitializer,很明显它是一个初始化的类,它是一个抽象类,可以理解为一个公用的基类,然后看一下onStartup这个方法,最主要的方 ...

  6. RxPermissions 源码解析之举一反三

    [toc] RxPermissions 源码解析 简介 RxPermissions 是基于 RxJava 开发的用于帮助 在Android 6.0 中处理运行时权限检测的框架.在 Android 6. ...

  7. webpack那些事:浅入深出-源码解析构建优化

    基础知识回顾 入口(entry) module.exports = {entry: './path/to/my/entry/file.js' }; //或者 module.exports = {ent ...

  8. Java String源码解析

    String类概要 所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现 String类提供了操作 ...

  9. [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型

    [源码解析] 深度学习流水线并行 PipeDream(3)- 转换模型 文章目录 [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型 0x00 摘要 0x01 前言 1.1 改 ...

最新文章

  1. 16625篇论文揭示25年来AI进化规律!深度学习时代行将结束!
  2. Android 学习历程摘要(一)
  3. 《剑指offer》第十三题(机器人的运动范围)
  4. MyBatis-动态SQL
  5. 田志刚:致《你的知识需要管理》读者
  6. Matrix工作室纳新管理规章
  7. 2、Python_Day_1_作业
  8. 海南省月降水量分布数据
  9. bootstrap 模态框modal
  10. MAC安装ant的办法
  11. eclipse缺少org.apache.http.legacy的解决办法
  12. 怎么简单使用Xftp6
  13. Mixly Aduino 超声波~蜂鸣器
  14. 百度祝恒书:百度智能招聘技术和应用实践
  15. Semantic UI 之 条目 item
  16. 如何入门“动物杂交:新视野”
  17. 常用css整理2 转自csdn
  18. 朴素贝叶斯分类算法简介
  19. 解决TV安装第三方app不能横屏问题(uni-app)
  20. Dreamweaver CS6网页设计入门、进阶与提高

热门文章

  1. 第十四届《歌优舞美憧憬明天》----巨多爱助残助学活动
  2. PHP短网址生成系统/短链接生成系统/URL缩短器系统源码免费下载
  3. Java浮点数运算工具类
  4. 全国计算机等级考试一级证书在哪查啊?
  5. 你的年货买齐了吗?2023最全年货清单列表
  6. 如何在 macOS Monterey 上使用Live Text
  7. maven项目打包出现:“未找到主清单属性”或者jar包无法正常运行
  8. window10打开电脑没有输入法
  9. linux 运行ctl文件_linux journalctl 命令
  10. 【WordPress】百度收录查询和显示WordPress插件(自定义栏目优化版)