在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 支持。
该文章知识作为个人笔记,大部分知识来源于书本或网络整理总结;