C# Array扩展方法:快速实现Add与AddRange功能
在C#开发中,原生 Array 一旦定义大小便不可直接修改。为了满足动态添加单个或一组元素的需求,本文将介绍如何封装通用的扩展方法。通过对比基于 Array.Resize 的传统实现与基于 LINQ Concat 的现代写法,展示如何优雅地实现 Add 和 AddRange 功能,并提供完整的测试用例。
背景与目标
C# 中的 Array 属于定长数据结构。当需要往已有数组追加新元素时,常规做法是使用 Array.Resize 扩容并赋值。这一过程较为繁琐,因此将其封装为静态扩展方法,能够显著提升代码的可读性与复用性。
实现准备条件
- 环境支持:需具备基本的 C# 编译环境(.NET Framework 2.0+ 或 .NET Core/5+)。
- 命名空间:若使用 LINQ 方式,需在文件中引用
using System.Linq;。
第1步:采用传统Resize实现(适用于.NET 2.0)
目的:在不依赖 LINQ 的环境下,手动完成内存分配与数据拷贝。
动作:定义一个包含 Add(单元素)和 AddRange(多元素)方法的静态类。核心逻辑为获取当前长度、执行 Resize 扩容,最后填入新值。
public static T[] Add<T>(this T[] array, T item) { int _count = array.Length; Array.Resize<T>(ref array, _count + 1); array[_count] = item; return array; } public static T[] AddRange<T>(this T[] sourceArray, T[] addArray) { int _count = sourceArray.Length; int _addCount = addArray.Length; // 将数组扩容至原有长度加上新增数组长度之和 Array.Resize<T>(ref sourceArray, _count + _addCount); // 使用 CopyTo 方法高效拷贝新数据 addArray.CopyTo(sourceArray, _count); return sourceArray; }
第2步:采用LINQ实现(推荐.NET 3.0以上版本)
目的:利用 LINQ 简化代码结构,减少样板代码。
动作:使用 Concat 方法连接源数组与新数据项(组),随后调用 ToArray() 返回结果。
using System.Linq; public static T[] Add<T>(this T[] array, T item) { // 将单个元素包装为数组并与原数组拼接 array = array.Concat<T>(new T[1] { item }).ToArray(); return array; } public static T[] AddRange<T>(this T[] sourceArray, T[] addArray) { // 直接合并两个数组 sourceArray = sourceArray.Concat<T>(addArray).ToArray(); return sourceArray; }
验证测试结果
为了确保扩展方法的健壮性,我们需要对“添加单个元素”和“追加数组段”两个场景进行单元覆盖测试。以下分别列出对应的 Assert 验证流程及最终运行结果截图:
验证步骤一:Add 方法测试
[TestMethod()] public void AddTest() { // 1. 设定预期输出与实际初始状态 int[] _source = new int[3] { 1, 2, 3 }; int[] _expected = new int[4] { 1, 2, 3, 4 }; // 2. 执行扩展方法 _source = _source.Add(4); // 3. 判定是否一致 CollectionAssert.AreEqual(_source, _expected); }
验证步骤二:AddRange 方法测试
[TestMethod()] public void AddRangeTest() { int[] _source = new int[3] { 1, 2, 3 }; int[] _expected = new int[6] { 1, 2, 3, 4, 5, 6 }; _source = _source.AddRange(new int[3] { 4, 5, 6 }); CollectionAssert.AreEqual(_source, _expected); }
上述两种实现均通过测试验证,以下为传统的 Resize 方式测试运行的结果展示:
以下是采用 LINQ Concat 方式编写测试后跑出的运行结果:
简要总结
C# 数组动态扩容本质上是内存重新分配的过程。对于追求性能极致且不依赖高版本的场景,使用 `Array.Resize` 配合 `CopyTo` 是经典方案;而对于日常业务开发与较新版本,LINQ 的方案更具可读性且不易出错。以上就是C#实现Array扩展Add与Addrange功能的详细内容,更多关于C#数组操作技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









