我的目標是從指定收藏中刪除收藏而不接觸原始收藏項目的收藏副本。我有以下類:修改新收藏而不接觸原始收藏
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」而不是「收藏」。我怎樣才能做到這一點?是不是下面一行做深拷貝:
var newCollection = new Collection<Foo>(collection);
如果是這樣,那麼爲什麼原始對象會受到影響?
我知道我可以通過這條線實現我的目標太:
var newCollection = collection.Where(x => x.Name != "Name2");
但我在有關Remove東西和深拷貝的東西上面發生的困境。
這是System.Collections.ObjectModel.Collection – 2013-03-07 07:32:31