C#中数组扩容的几种方式介绍

 更新时间:2022年08月27日 11:45:14   作者:Darren Ji  
这篇文章介绍了C#中数组扩容的几种方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

假设有一个规定长度的数组,如何扩容呢?最容易想到的是通过如下方式扩容:

    class Program
    {
        static void Main(string[] args)
        {
            int[] arrs = new[] {1, 2, 3, 4, 5};
            arrs[5] = 6;
        }
    }

报错:未处理IndexOutOfRanageException,索引超出了数组界限。

创建一个扩容的临时数组,然后赋值给原数组,使用循环遍历方式

        static void Main(string[] args)
        {
            int[] arrs = new[] {1, 2, 3, 4, 5};
            int[] temp = new int[arrs.Length + 1];
            //遍历arrs数组,把该数组的元素全部赋值给temp数组
            for (int i = 0; i < arrs.Length; i++)
            {
                temp[i] = arrs[i];
            }
            //把临时数组赋值给原数组,这时原数组已经扩容
            arrs = temp;
            //给扩容后原数组的最后一个位置赋值
            arrs[arrs.Length - 1] = 6;
            foreach (var item in arrs)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

创建一个扩容的临时数组,然后赋值给原数组,使用Array的静态方法

像这种平常的数组间的拷贝,Array类肯定为我们准备了静态方法:Array.Copy()。

        static void Main(string[] args)
        {
            int[] arrs = new[] {1, 2, 3, 4, 5};
            int[] temp = new int[arrs.Length + 1];
            Array.Copy(arrs, temp, arrs.Length);
            //把临时数组赋值给原数组,这时原数组已经扩容
            arrs = temp;
            //给扩容后原数组的最后一个位置赋值
            arrs[arrs.Length - 1] = 6;
            foreach (var item in arrs)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

使用Array的静态方法扩容

但是,拷贝来拷贝去显得比较繁琐,我们也可以使用Array.Resize()方法给数组扩容。

        static void Main(string[] args)
        {
            int[] arrs = new[] {1, 2, 3, 4, 5};
            Array.Resize(ref arrs, arrs.Length + 1);
            //给扩容后原数组的最后一个位置赋值
            arrs[arrs.Length - 1] = 6;
            foreach (var item in arrs)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

总结:数组扩容优先考虑使用Array的静态方法Resize,其次考虑把一个扩容的、临时的数组赋值给原数组。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • C#实现将网页保存成图片的网页拍照功能

    C#实现将网页保存成图片的网页拍照功能

    这篇文章主要介绍了C#实现将网页保存成图片的网页拍照功能,很实用的一个功能,需要的朋友可以参考下
    2014-07-07
  • c# Newtonsoft 六个值得使用的特性(上)

    c# Newtonsoft 六个值得使用的特性(上)

    这篇文章主要介绍了c# Newtonsoft 六个值得使用的特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Windows中使用C#为文件夹和文件编写密码锁的示例分享

    Windows中使用C#为文件夹和文件编写密码锁的示例分享

    这篇文章主要介绍了Windows中使用C#为文件夹和文件编写密码锁的示例分享,特别是文件锁可以针对各种类型的文件输入密码进行加密解密,非常实用,需要的朋友可以参考下
    2016-03-03
  • C#中的IDisposable模式用法详解

    C#中的IDisposable模式用法详解

    这篇文章主要介绍了C#中的IDisposable模式用法,讲述了垃圾资源回收机制的实现,并对比分析了Dispose()方法、~DisposableClass()析构函数、虚方法Dispose(bool disposing)的原理,需要的朋友可以参考下
    2014-09-09
  • C#预处理指令之#line,#pragma warning 详细解析

    C#预处理指令之#line,#pragma warning 详细解析

    #line 指令可能由生成过程中的自动中间步骤使用。例如,如果行从原始的源代码文件中移除,但是您仍希望编译器基于文件中的原始行号生成输出,则可以移除行,然后用 #line 模拟原始行号
    2014-01-01
  • C# .NET创建虚拟目录的方法详解

    C# .NET创建虚拟目录的方法详解

    虚拟目录(virtual directory),计算机术语,每个 Internet服务可以从多个目录中发布。本文将为大家介绍如何通过C# asp.net mvc 创建虚拟目录,感兴趣的可以了解一下
    2022-01-01
  • C#中DataTable 转换为 Json的方法汇总(三种方法)

    C#中DataTable 转换为 Json的方法汇总(三种方法)

    JavaScript Object Notation (Json)是一种轻量级的数据交换格式,下面小编给大家介绍三种方法实现DataTable转换成 Json 对象,感兴趣的朋友一起看看吧
    2016-11-11
  • C# 泛型深入理解介绍

    C# 泛型深入理解介绍

    在上一个专题中介绍了C#2.0 中引入泛型的原因以及有了泛型后所带来的好处,然而上一专题相当于是介绍了泛型的一些基本知识的,对于泛型的性能为什么会比非泛型的性能高却没有给出理由,所以在这个专题就中将会介绍原因和一些关于泛型的其他知识
    2012-11-11
  • C# Sqlite数据库的搭建及使用技巧

    C# Sqlite数据库的搭建及使用技巧

    这篇文章主要介绍了C# Sqlite数据库的搭建及使用技巧,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • c#反射表达式树模糊搜索示例

    c#反射表达式树模糊搜索示例

    这篇文章主要介绍了c#反射表达式树模糊搜索示例,反射实体T,非datetime字段反射获取表达式树,需要的朋友可以参考下
    2014-02-02

最新评论