如何将一个静态列表中的项转移到另一个
本文关键字:列表 转移 另一个 静态 一个 | 更新日期: 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();
}
}