Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查看列表中要索引的项目数量c_C#_List_Indexing - Fatal编程技术网

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

我希望在C中添加到列表中的某个项目中有一个数量,但每次添加一个项目时,整个列表的数量都会发生变化?任何帮助都会很好

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。