众所周知,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 添加扩展的更多相关文章

  1. 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样

    申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...

  2. linux下用phpize给PHP动态添加扩展

    使用php的常见问题是编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,这里就需要用到phpize了. 如我想增加bcmath扩展的支持,这 ...

  3. 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法

    2013-11-24 前言: 上周在工作中遇到了一些跟JS以及前台交互的问题,虽然算不上多么高深,但是在解决时也走了一些弯路,所以就总结一下. 1.    JS获取checkboxList所选的值 这 ...

  4. linux下用phpize给PHP动态添加扩展(转)

    使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,别说,php还真有这样的功能. 我没有在手册中看到. 如我想增加b ...

  5. ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展

    关于ExtJS对javascript中的Array的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 因为 ...

  6. php添加扩展插件

    给PHP安装扩展的方式有好多 一.重新编译 进入PHP源码目录./configure --prefix=/usr/local/php ...[其他编译参数] 二.通过phpize添加扩展 进入PHP源 ...

  7. shell的split生成的文件按规律命名及添加扩展名

    可以参考 用shell切分文件--split shell下的split命令主要用于分割一些大文件用的,比如经常要用到将一个几十万行的TXT分割为多少行一个的文件,非常有用,唯一坑爹的是,切割后的文件不 ...

  8. ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)

    BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类. ...

  9. Yii2.0 手动添加扩展 redis为例

    手动下载yii2-redis扩展包(https://github.com/yiisoft/yii2-redis )并解压 将解压后的文件移至/vebdor/yiisoft命名为yii2-redis 打 ...

随机推荐

  1. js 类似php中foreach的方法

    参考下面实例 <script>var arr =  {    'a' : '111111',    'b' : '222222',    'c' : '333333'};for(var k ...

  2. 46 关于Linux的I/O重定向

    I/O重定向是一个过程,这个过程捕捉一个文件.或命令.或程序.或脚本.甚至代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件.或命令.或程序.或脚本. 1.I/O重定 ...

  3. [AngularJS - app] AngularJS Location-picker app

    From: http://rangle.io/blog/two-ways-to-build-a-location-picker-for-a-mobile-angularjs-application/ ...

  4. [Bootstrap] 3. Responsive Gridding (.hidden-sm, visible-md)

    Grid Size For .col-md We started designing our site using the col-md-* classes. These classes target ...

  5. C_数据结构_链表的链式实现

    传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...

  6. Supervised Learning-Regression

    假设我们有一张房子属性及其价格之间的关系表(如下图所示) ,根据这些数据如何估计其他房子的价格?我们的第一个反应肯定是参考属性相似的房子的价格.在属性较少时这个方法还行得通,属性太复杂时就不那么简单了 ...

  7. 数据库通用Jdbc操作

    public class JdbcUtil { /** * 关闭一个数据库链接 * @param conn */ public static void closeConnection(Connecti ...

  8. Spring中Bean的生命中期与InitializingBean和DisposableBean接口

    Spring提供了一些标志接口,用来改变BeanFactory中的bean的行为.它们包括InitializingBean和DisposableBean.实现这些接口将会导致BeanFactory调用 ...

  9. JAVA_java关联源码

    java怎样关联源码?? 1,按住control键,点一下你要看源码的类,跳到如下界面: 2,单击,跳到下一个界面 3,继续,找到jdk按照路径,找到src.zip文件 4. 4. 点击OK就可以看源 ...

  10. mysql数据库常用语句2

    关于mysql常用语句的整理,上一篇涉及到ddl.dml以及一些简单的查询语句. 1:mysql分页查询 select * from table_name limit 5,10;   从下标为5元素查 ...