【发布时间】:2016-03-11 12:26:08
【问题描述】:
我的两个列表都在被修改,并试图避免这种行为......
这里有什么问题?
我有一个“大”列表,我想删除 itemsToRemoveList 中存在的所有项目,但不让它修改原始列表。
我已经简化了示例代码..
List<string> aList = new List<string>(){"My","name","is", "jeff"}; // cached full list
List<string> bList = aList; // initial copy
List<string> itemsToRemoveList = new List<string>(){"jeff"};
bList.RemoveAll(itemsToRemoveList.Contains); // remove only from copy
foreach (string s in aList)
{
Console.Write(s + " "); // expect "my name is jeff"
}
Console.WriteLine();
foreach (string s in bList)
{
Console.Write(s + " "); // expect "my name is"
}
// however this modifies both collections.
Console.ReadLine();
【问题讨论】:
-
这不是一个“副本”,它只是创建了对同一个列表的另一个引用。
-
如果您的列表是值类型或引用类型,这是一个非常有用的链接,它涵盖了最好的方法:stackoverflow.com/questions/222598/…
-
@sr28 如果项目被克隆或另一个列表的副本,则处理创建一个新列表。这里不需要,因为
string是不可变的。
标签: c# data-structures