Mon objectif est d'obtenir une copie de la collection avec un élément spécifique retiré de celle-ci sans toucher aux éléments de la collection originale. J'ai la classe suivante :
public class Foo
{
public string Name { get; set; }
}
et l'opération que je fais est :
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);
}
Je supprime l'élément de "newCollection" mais le problème est que la ligne suivante :
newCollection.Remove(f);
supprime également l'élément de la collection originale, c'est-à-dire de l'objet "collection". Je veux modifier uniquement "newCollection" et non "collection". Comment puis-je le faire ? La ligne suivante ne fait-elle pas une copie profonde ?
var newCollection = new Collection<Foo>(collection);
Si oui, pourquoi l'objet original est-il affecté ?
Je sais que je peux atteindre mon objectif grâce à cette ligne également :
var newCollection = collection.Where(x => x.Name != "Name2");
mais je suis dans un dilemme au sujet de la suppression et de la copie profonde qui se produisent ci-dessus.