由于数组和集合都是引用类型,
当把一个数组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" 无论选择哪种方法,对复制后的列表进行修改都不会影响原始列表的数据。
标签:Console,WriteLine,array2,array1,复制,数组,集合,Join,String From: https://www.cnblogs.com/hanzq/p/17332890.html