Je semblons avoir un problème étrange dans lequel chaque fois que je tente de modifier une valeur d'un élément dans une collection, il affecte tous les autres qui contiennent les mêmes valeurs initiales.Changement de valeur d'un élément dans une collection affecte tous les éléments en double
Un exemple est ci-dessous:
public class Product : ICloneable
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public Product()
{
Id = 0;
Quantity = 0;
}
public Clone()
{
return (Product)this.MemberwiseClone();
}
}
...
private static IEnumerable<Product> GetProducts(Product product, int quantity)
{
for (int i = 0; i < quantity; i++)
{
yield return product.Clone();
}
}
...
IEnumerable<Product> myProducts = Enumerable.Empty<Product>();
Product product1 = new Product() { Id = 0, Name = "Buzz Cola" };
Product product2 = new Product() { Id = 1, Name = "Choco Bites" };
myProducts = myProducts.Concat(GetProducts(product1, 2));
myProducts = myProducts.Concat(GetProducts(product2, 1));
//Now set the quantity of the first product to be 1.
myProducts.ElementAt(0).Quantity = 1;
foreach(Product product in myProducts)
{
Console.WriteLine(string.Format("Id: {0} Quantity: {1}", product.Id, product.Quantity));
}
//Output:
//Id: 0 Quantity: 1
//Id: 0 Quantity: 1 //NO!
//Id: 1 Quantity: 0
Toutes les idées?
Un grand merci!
Mise à jour J'ai mis à jour la question d'inclure le clone() comme l'a suggéré. La sortie est toujours la même cependant.
Comment changez-vous l'article? –
myProducts.ElementAt (0) .Quantité = 1; –
'myProducts' n'a pas de propriété' Is' ou 'Quantity'. Voulez-vous dire 'product.Id'? – dtb