C#实现Array添加扩展实例
作者:shichen2014 发布时间:2023-02-16 23:01:03
标签:C#,Array,扩展
一般学过C#的都知道,Array 一旦定义好,比如四个长度,当需要再往里面添加元素的时候,需要Array.Resize一下才可以。有鉴于此,为了提高代码复用,所以索性封装下,方便使用。
具体实现代码如下:
/// <summary>
/// Array添加
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="array">Array</param>
/// <param name="item">需要添加项</param>
/// <returns>返回新的Array</returns>
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;
}
/// <summary>
/// Array添加
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="sourceArray">Array</param>
/// <param name="addArray">Array</param>
/// <returns>返回新的Array</returns>
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);
//foreach (T t in addArray)
//{
// sourceArray[_count] = t;
// _count++;
//}
addArray.CopyTo(sourceArray, _count);
return sourceArray;
}
测试代码:
[TestMethod()]
public void AddTest()
{
int[] _source = new int[3] { 1, 2, 3 };
int[] _expected = new int[4] { 1, 2, 3, 4 };
_source = _source.Add(4);
CollectionAssert.AreEqual(_source, _expected);
}
[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);
}
测试结果:
代码逻辑很简单,无需说明,只是方面后续使用而已,这是基于.NET 2.0的写法,大家都知道,在.NET 3.0+有了LINQ出现,实现此效果更为简单方面,代码如下:
/// <summary>
/// Array添加
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="array">Array</param>
/// <param name="item">需要添加项</param>
/// <returns>返回新的Array</returns>
public static T[] Add<T>(this T[] array, T item)
{
array =
array.Concat
<T>(new T[1] { item }).ToArray();
return array;
}
/// <summary>
/// Array添加
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="sourceArray">Array</param>
/// <param name="addArray">Array</param>
/// <returns>返回新的Array</returns>
public static T[] AddRange<T>(this T[] sourceArray, T[] addArray)
{
sourceArray =
sourceArray.Concat
<T>(addArray).ToArray();
return sourceArray;
}
同样的测试代码:
[TestMethod()]
public void AddTest()
{
int[] _source = new int[3] { 1, 2, 3 };
int[] _expected = new int[4] { 1, 2, 3, 4 };
_source = _source.Add(4);
CollectionAssert.AreEqual(_source, _expected);
}
[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);
}
测试结果:
希望本文能对大家有所帮助!


猜你喜欢
- 事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道win
- 找入口对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方
- 本文实例讲述了C#实现将Email地址转成图片显示的方法。分享给大家供大家参考。具体实现方法如下:private final static
- BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support
- Maven本地jar引用的实现方法有的时候需要在maven工程项目中引用本地的jar,pom.xml配置如下:<dependency&
- java Class.getSimpleName() 的用法Usage in android:private static final St
- 运行下面这段代码,观察其结果:package com.test;public class HelloB extends HelloA {pu
- 文件上传是网站非常常用的功能,直接使用Servlet获取上传文件还得解析请求参数,比较麻烦,所以一般选择采用apache的开源工具,comm
- 一、自己封装URLConnection 连接请求类 public void downloadFile1() { try{ &nb
- 系列目录 【已更新最新开发文章,点击查看详细】类似于以下场景,将表单中的用户信息(包含附件)上传到服务器并保存到数据库中,<form
- spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。Sp
- 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
- 公司app要求做一个扭蛋功能,其实就是一个可拖动层叠卡片列表,原理还是由一个自定义Recyclerview和LayoutManager来实现
- 问题背景能准确说出下面的java 执行完毕后会打印出什么? System.out.println(
- 本文实例为大家分享了java实现查找替换功能的具体代码,供大家参考,具体内容如下查找if(searchTxt.getText().equal
- 标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。标接口在Java语言中
- springboot开启一个监听线程执行任务public class StartApplicationListener implements
- 本文主要是通过一个银行用户取钱的实例,演示java编程多线程并发处理场景,具体如下。从一个例子入手:实现一个银行账户取钱场景的实例代码。第一
- 前言今天,和大家分享一个开源的多功能视频播放器 — GSYVideoPlayer,支持弹幕,滤镜、水印、gif截图,片头
- 本文实例讲述了C#实现winform中RichTextBox在指定光标位置插入图片的方法。分享给大家供大家参考,具体如下://获取RichT