[C#]Array 添加扩展
众所周知,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);
}
测试结果:

希望有所帮助!
[C#]Array 添加扩展的更多相关文章
- 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...
- linux下用phpize给PHP动态添加扩展
使用php的常见问题是编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,这里就需要用到phpize了. 如我想增加bcmath扩展的支持,这 ...
- 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法
2013-11-24 前言: 上周在工作中遇到了一些跟JS以及前台交互的问题,虽然算不上多么高深,但是在解决时也走了一些弯路,所以就总结一下. 1. JS获取checkboxList所选的值 这 ...
- linux下用phpize给PHP动态添加扩展(转)
使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,别说,php还真有这样的功能. 我没有在手册中看到. 如我想增加b ...
- ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展
关于ExtJS对javascript中的Array的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 因为 ...
- php添加扩展插件
给PHP安装扩展的方式有好多 一.重新编译 进入PHP源码目录./configure --prefix=/usr/local/php ...[其他编译参数] 二.通过phpize添加扩展 进入PHP源 ...
- shell的split生成的文件按规律命名及添加扩展名
可以参考 用shell切分文件--split shell下的split命令主要用于分割一些大文件用的,比如经常要用到将一个几十万行的TXT分割为多少行一个的文件,非常有用,唯一坑爹的是,切割后的文件不 ...
- ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)
BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类. ...
- Yii2.0 手动添加扩展 redis为例
手动下载yii2-redis扩展包(https://github.com/yiisoft/yii2-redis )并解压 将解压后的文件移至/vebdor/yiisoft命名为yii2-redis 打 ...
随机推荐
- Aizu 2306 Rabbit Party DFS
Rabbit Party Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view. ...
- Codeforces Round #319 (Div. 1) C. Points on Plane 分块
C. Points on Plane Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/pro ...
- JSON 之FastJson解析
http://blog.sina.com.cn/s/blog_7ffb8dd501013qas.html 一.阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具 ...
- IOS开发-加载本地音乐
IOS开发-加载本地音乐 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text() ...
- iOS开发——数据持久化Swift篇&通用文件存储
通用文件存储 import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextFie ...
- MySQL架构优化实战系列2:主从复制同步与查询性能调优
- careercup-中等难题 17.2
17.2 设计一个算法,判断玩家是否赢了井字游戏. 解法: 假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用.如果是多次 ...
- c++ 模运算
在数学里,"模运算"也叫"求余运算",用mod来表示模运算. 对于 a mod b 可以表示为 a = q(商)*b(模数) + r(余数),其中q表示商,b表 ...
- Android Studio编译FBReaderJ
我的个人环境 系统:mac (windows应该差不多) 工具:android studio 2.1.2 注意:一定要安装NDK!一定要安装NDK!一定要安装NDK! 如何安装NDK ...
- unique函数 (STL)
转自http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html 类属性算法unique的作用是从输入序列中“删除”所有相邻的重复 ...