【发布时间】:2013-03-07 15:37:22
【问题描述】:
我的目标是在不触及原始收藏的项目的情况下获得一份收藏副本,其中删除了指定的项目。我有以下课程:
public class Foo
{
public string Name { get; set; }
}
而我正在做的操作是:
var collection = new Collection<Foo>
{
new Foo {Name = "Name1"},
new Foo {Name = "Name2"},
new Foo {Name = "Name3"},
new Foo {Name = "Name4"}
};
var newCollection = new Collection<Foo>(collection);
Foo f = collection.FirstOrDefault(x => x.Name == "Name2");
if (f != null)
{
newCollection.Remove(f);
}
即我正在从“newCollection”中删除该项目,但问题在于以下行:
newCollection.Remove(f);
也从原始集合中删除该项目,即从“集合”对象中。我只想修改“newCollection”而不是“collection”。我怎样才能做到这一点?下面这行不是在做深拷贝吗:
var newCollection = new Collection<Foo>(collection);
如果是,那为什么原来的对象会受到影响?
我知道我也可以通过这条线路实现我的目标:
var newCollection = collection.Where(x => x.Name != "Name2");
但我对上面发生的删除内容和深拷贝内容感到两难。
【问题讨论】:
-
是 System.Collections.ObjectModel.Collection
标签: c# generics collections deep-copy