C# 查看列表中要索引的项目数量c
我希望在C中添加到列表中的某个项目中有一个数量,但每次添加一个项目时,整个列表的数量都会发生变化?任何帮助都会很好C# 查看列表中要索引的项目数量c,c#,list,indexing,C#,List,Indexing,我希望在C中添加到列表中的某个项目中有一个数量,但每次添加一个项目时,整个列表的数量都会发生变化?任何帮助都会很好 private void btnAddBasket_Click(object sender, EventArgs e) { Product NewItem = new Product(); foreach (Product tmp in tmpProducts) { NewItem.Stock = tmp.Stock; tm
private void btnAddBasket_Click(object sender, EventArgs e)
{
Product NewItem = new Product();
foreach (Product tmp in tmpProducts)
{
NewItem.Stock = tmp.Stock;
tmp.Quantity = NewItem.Quantity;
}
NewItem.Quantity = Convert.ToInt16(txtQuantity.Text);
if (NewItem.Quantity > 0)
{
if (NewItem.Quantity > NewItem.Stock)
{
MessageBox.Show("There is only = " + NewItem.Stock + " in stock");
}
else
{
shoppingCart.Add(tmpProducts.ElementAt(lstViewProducts.SelectedIndex));
LoadCart();
txtQuantity.Text = "0";
}
}
else
MessageBox.Show("Please enter quantity you want");
}
已删除tmp.Quantity=NewItem.Quantity。它将重置列表中的产品
private void btnAddBasket_Click(object sender, EventArgs e)
{
Product NewItem = new Product();
foreach (Product tmp in tmpProducts)
{
NewItem.Stock = tmp.Stock;
}
NewItem.Quantity = Convert.ToInt16(txtQuantity.Text);
if (NewItem.Quantity > 0)
{
if (NewItem.Quantity > NewItem.Stock)
{
MessageBox.Show("There is only = " + NewItem.Stock + " in stock");
}
else
{
shoppingCart.Add(tmpProducts.ElementAt(lstViewProducts.SelectedIndex));
LoadCart();
txtQuantity.Text = "0";
}
}
else
MessageBox.Show("Please enter quantity you want");
}
答案很简单: 您正在创建一个名为NewItem的产品实例,并且您只使用此项进行所有操作 例如:
foreach (Product tmp in tmpProducts)
{
NewItem.Stock = tmp.Stock;
}
您正在迭代列表中的所有项目,并将其值分配给NewItem.Stock。NewItem.Stock将仅具有列表中最后一项的值。如果列表中没有项目,NewItem.Stock将保留其初始值。这个循环看起来有点奇怪
你原来问题的答案是:
这一定是参考文献的问题。确保列表中的产品不都是相同的参考。我将向您展示一些代码:
正确实例化新对象并具有额外引用:
Product x = new Product ("abc"); // create new object with new reference
list.add(x);
x = new Product ("def"); // create new object with new reference
list.add(x);
错误-不使用new关键字指定新引用
Product x = new Product ("abc"); // create new object with new reference
list.add(x);
x.Name = "def"; // keep the reference (no "new" keyword") and change it
list.add(x);
如果不使用new关键字,您将始终与同一对象对话。如果随后更改此对象上的某些内容,则指向此对象的所有引用仍然指向该对象,并且对内部变量的访问将始终显示相同的结果
。。。顺便说一句:最好用一个名为Available并返回NewItem.Quantity>0的属性替换NewItem.Quantity>0。这为您提供了一种更好的可重用性 将产品的初始化放入循环中,否则您只使用一个对象:顺便说一下,您应该使用uint.TryParse而不是Convert.ToInt16。如果用户输入非数字字符串,应用程序将崩溃。为什么要分配库存循环?最终,它将分配tmpProducts集合中的最后一个产品库存。您好,谢谢您的帮助,但现在它会一直将数量设置为0。