众所周知,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. Android Studio导入项目

    原文:http://ask.android-studio.org/?/article/21 本篇教程中使用到的Android Studio版本为1.0, Eclipse ADT版本23.0.4.请尝试 ...

  2. 03---JavaScript基础整理

    一.概述:           Netscape开发的一种基于对象和事件驱动的脚本语言.                  被设计用来想HTML页面添加交互行为.           无需编译,可由浏 ...

  3. 关于Android模拟器键盘不能使用的解决方法

    很多朋友遇到一个问题,自己搭建完了Android环境后,启动模拟器体验Android系统,但是发现不能使用键盘方便的输入内容,如下图: 同时,使用笔记本的键盘也无法输入内容,只能通过模拟器内置的输入法 ...

  4. win10.10 激活

    最近几天一直有同学来找我说,为什么用密钥或kms神龙版都无法激活win8/8.1.win10,于是我就让这些同学给我截图,结果他们激活出错的信息基本都一样,都是错误:“0XC004F074 软件授权服 ...

  5. php一些技术要点连接地址

    http基本认证: http://www.php.net/manual/zh/features.http-auth.php

  6. Eclipse 各种包说明

    2001年11月7日 ,Eclipse 1.0发布 半年之后,2002年6月27日Eclipse进入了2.0时代.2.0时代的Eclipse经历了2.0和2.1两个大的版本.其中2.0在 之后又推出了 ...

  7. c++20道面试题

    摘自传智播客论坛 问1:请用简单的语言告诉我C++ 是什么?答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领 ...

  8. Find security bugs学习笔记V1.0

    Find security bugs学习笔记V1.0 http://www.docin.com/p-779309481.html

  9. JavaScript总结1

    一.JavaScript变量类型.声明.作用域 1.1 数字 number 小数和整数都叫number,以0x或0X开头的表示十六进制.当无穷大时,用Infinity表示(试试 9/0),其他非数字用 ...

  10. 关于RSS

    RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章.新闻.音频或视频的网摘.RSS文件(或称做摘要.网络摘要.或频更新,提供到频道)包含了全文或是节录的文字,再 ...