私の目標は、元のコレクションのアイテムに触れることなく、指定されたアイテムが削除されたコレクションのコピーを取得することです。私は次のクラスを持っています:
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");
しかし、私は上で起こっている削除と深いコピーについてジレンマに陥っています。