如何将一个静态列表的项目传输到另一个

时间:2013-09-01 05:02:33

标签: c# linq list

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

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

我正在尝试将list1的项目转移到list2

list2 = list1;

现在,当我尝试从list2中删除某些内容时,该项也会从list1中删除。

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

我怎样才能做到这一点,我只能在不妨碍list1的情况下从list2中删除。

3 个答案:

答案 0 :(得分:4)

示例中的列表2和列表1都是相同的对象,变量列表2和list1指向它。你可以使用

list2 = new List<string>(list1);

会使它们成为不同的对象。

答案 1 :(得分:3)

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

list2 = new List<string>(list1);

或使用Linq:

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

也可以静态调用:

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

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

答案 2 :(得分:1)

从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();
    }
}