数组和集合的复制方法

由于数组和集合都是引用类型,

当把一个数组array1赋值给另一个数组array2时,并不是真正将array1的值赋值给array2,而是将array1的指针赋值给array2。

由此造成当修改array2中的数据时,array1中的数据也会相应修改。

如何将array1中的数据赋值给array2,并且让两个数组是独立的,修改数据时不会相互影响。

有以下4种方法:

复制代码
        //使用clone方法复制
        private void button2_Click(object sender, EventArgs e)
        {
            array2 = (int[])array1.Clone();
            array2[2] = 200;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用linq方法
        private void button3_Click(object sender, EventArgs e)
        {
            array2 = array1.Select(x => x).ToArray();
            array2[2] = 300;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用Array.Copy()方法
        private void button4_Click(object sender, EventArgs e)
        {
            Array.Copy(array1, 0, array2, 0, array2.Length);
            array2[2] = 400;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用Buffer.BlockCopy()方法
        private void button5_Click(object sender, EventArgs e)
        {
            Buffer.BlockCopy(array1, 0, array2, 0, array2.Length);
            array2[2] = 500;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }
复制代码

对于list类型,可以采用以下方法:(备注,以下方法由chatgpt生成)

复制代码
可以使用List<T>类的构造函数或AddRange方法来实现此目的。

方法1:使用构造函数

csharp
var originalList = new List<int> { 1, 2, 3 };
var copiedList = new List<int>(originalList); // 使用原始列表初始化新的列表

copiedList.Add(4); // 在复制后的列表中添加一个元素
Console.WriteLine(string.Join(", ", originalList)); // 输出 "1, 2, 3"
Console.WriteLine(string.Join(", ", copiedList)); // 输出 "1, 2, 3, 4"
方法2:使用AddRange方法

csharp
var originalList = new List<int> { 1, 2, 3 };
var copiedList = new List<int>();

copiedList.AddRange(originalList); // 将原始列表中的所有元素添加到新列表中

copiedList.Add(4); // 在复制后的列表中添加一个元素
Console.WriteLine(string.Join(", ", originalList)); // 输出 "1, 2, 3"
Console.WriteLine(string.Join(", ", copiedList)); // 输出 "1, 2, 3, 4"
无论选择哪种方法,对复制后的列表进行修改都不会影响原始列表的数据。
复制代码

 

posted on   hanzq_go  阅读(95)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-04-19 C#中的事件

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示