Вам нужно что-то вроде метода клонирования или конструктора копирования.
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public Product()
{
this.Id = 0;
this.Name = null;
this.Quantity = 0;
}
public Product(Product product)
{
this.Id = product.id;
this.Name = product.Name;
this.Quantity = product.Quantity;
}
}
IList<Product> myProducts = new List<Product>();
Product product1 = new Product() { Id = 0, Name = "Buzz Cola" };
Product product2 = new Product() { Id = 1, Name = "Choco Bites" };
Product product3 = new Product(product1); // Use copy-constructor.
myProducts.Add(product1);
myProducts.Add(product2);
myProducts.Add(product3);
myProducts[0].Quantity = 1;
А теперь все должно быть хорошо. Вы можете использовать это вместе со своим методом клонирования для одновременного производства большого количества клонов.
Просто чтобы заметить, этот код все еще очень плохой - вы создаете разные экземпляры продукта с одинаковыми идентификаторами. Я могу только догадываться, но хотите ли вы создать что-то вроде корзины для покупок из товаров с количеством и товаром? Если да, вам стоит подумать о разделении класса продукта на два класса. И подумайте о доступности ваших свойств аганина.
public class Product
{
public Int32 Id { get; private set; }
public String Name { get; private set; }
}
public class ShoppingCartItem
{
public Product Product { get; private set; }
public Int32 Quantity { get; set; }
}
public class ShoppingCart
{
public IList<ShoppingCartItem> Items { get; private set; }
}
Это решает ваши текущие проблемы, потому что больше нет необходимости в клонировании продуктов.