📜  如何在C#中创建ArrayList的浅表副本(1)

📅  最后修改于: 2023-12-03 15:38:31.870000             🧑  作者: Mango

如何在C#中创建ArrayList的浅表副本

ArrayList 是 C# 中一个非常有用的类,它允许我们动态向数组添加元素。有时,我们希望创建一个数组列表的副本,但只是其元素的一个浅表副本,而不是一个深拷贝。在本文中,我们将介绍如何在 C# 中创建一个 ArrayList 的浅表副本。

什么是浅表副本?

在 C# 中,对象是通过引用传递的,这意味着当我们在数组列表中添加一个对象时,我们实际上是将该对象的指针添加到数组列表中。当我们复制该数组列表时,副本将包含相同的对象指针,而不是新的对象副本。这意味着,如果我们修改了副本中的对象,原始列表中的对象也会受到影响。

这就是所谓的浅表复制,因为我们只复制了对象的指针,而不是对象本身。相反,如果我们想要复制对象本身,我们需要进行深拷贝。

如何创建一个浅表副本?

要创建一个 ArrayList 的浅表副本,我们可以使用 ArrayList 类的 Clone 方法,该方法将返回一个数组列表的新实例,其中包含与原始列表相同的元素。由于是浅表复制,新列表中的元素与原始列表中的元素指向相同的对象。

以下是一个示例代码片段:

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        ArrayList orgList = new ArrayList() { "one", "two", "three" };
        Console.WriteLine("Original list:");
        PrintArrayList(orgList);

        ArrayList copyList = (ArrayList)orgList.Clone();
        Console.WriteLine("Copy list:");
        PrintArrayList(copyList);

        Console.WriteLine("Modifying the copy list...");
        copyList[0] = "modified";
        Console.WriteLine("Copy list:");
        PrintArrayList(copyList);

        Console.WriteLine("Original list:");
        PrintArrayList(orgList);
    }

    static void PrintArrayList(ArrayList list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}

该代码使用 ArrayList 类的 Clone 方法创建了一个原始列表的副本,并修改了副本中的第一个元素。当我们输出原始列表时,我们可以看到它没有受到修改的影响。

这就是如何在 C# 中使用 Clone 方法创建 ArrayList 的浅表副本的示例。记住,对于复杂的对象,我们可能需要进行深拷贝。