如何将一个静态列表中的项转移到另一个

本文关键字:列表 转移 另一个 静态 一个 | 更新日期: 2023-09-27 18:29:44

我有两个静态列表,即list1和list2

private static IList<String> list1;
private static IList<String> list2;
list1 = new List<String>() { "v1001", "v1002", "v1003","v1004" };

我正在尝试将列表1的项目转移到列表2

list2 = list1

现在,当我试图从列表2中删除某个项目时,该项目也会从列表1中删除。

var version = "v1001"
list2.Remove(version);

我如何才能做到这一点,我只能从列表2中删除而不妨碍列表1。

如何将一个静态列表中的项转移到另一个

exmaple中的列表2和列表1都是同一个对象,变量list2和list1指向它

list2 = new List<string>(list1);

这将使它们成为不同的对象。

您可以使用复制构造函数:

list2 = new List<string>(list1);

或者使用Linq:

list2 = list1.Select(s => s).ToList();

也可以称为静态

list2 = Enumerable<string>.ToList(list1);

注意:其他示例仅供参考-Yuriy的答案中提供的复制构造函数是最干净的方法。

从list2中移除也从list1中移除的原因是list1和list2都是引用类型。我的意思是,list1和list2基本上存储你的列表在内存中的某个地方。当你用=运算符将list2设置为list1时,你实际上要做的是告诉list2"好吧,你要指向list1所指向的内存中的同一个位置。"这意味着,如果你使用引用list1更改某个内容,那么这个更改对list2来说就像是重复的(但实际上只是更改相同的数据)。为了绕过这一点,而不是

list2 = list1;

我想你可以用这个(正如Yuriy Faktorovich所说):

编辑:尝试这个

class Program
{
    private static IList<string> list1 = new List<string>() { "v1001", "v1002", "v1003", "v1004" };
    private static IList<string> list2 = new List<string>(list1);
    static void Main(string[] args)
    {
        list1.Remove("v1001");
        print(list1);
        print(list2);
    }
    private static void print(IList<string> list)
    {
        foreach (string str in list)
        {
            Console.WriteLine(str);
        }
        Console.WriteLine();
    }
}