0

基本上,我试图向用户询问产品的 ID 号,然后将具有该编号的元素复制到新的集合中。

我在这里添加了产品。

    //Set up shop and add products
    public void SetUpShop()
    {
        products.Add(new Farm_Shop(1, "Apple", "Fruit\t", 0.49, 40, 'n'));
        products.Add(new Farm_Shop(2, "Orange", "Fruit\t", 0.59, 35, 'n'));
    }

然后,我显示一个菜单,允许用户输入他们想要的 ID 号,例如“1 代表 Apple”。然后我要做的是将“Apple”集合中的所有信息添加到新集合中。

//Display all items
    public void DisplayAll()
    {

        Console.WriteLine("\nID\tProduct\tCategory\tPrice\tStock\tIn Basket?");
        foreach (Farm_Shop temp in products)
        {
            //display each product to console by using Display method in Farm Shop class
            temp.Display();
        }

        //Allow user to add a product to the basket (change 'inBasket' to 'y')
        Console.WriteLine("Enter the ID of the item you wish to add to your basket: ");
        int idToAdd = int.Parse(Console.ReadLine());

        //Add array with the same as ID as person wants to add to basket to Basket array.
        basket.Add //Trying to add element to the "basket" collection.
    }

我显然可以将元素添加到集合中,但事实上我必须获取 ID 号,然后将其与所有数组中的内容进行比较,然后获取其中包含该 ID 的数组并将其添加到新集合中.

感谢帮助,因为我已经尝试了很多年了。而且我刚刚意识到,在我的解释中,我在说数组和集合之间切换时混淆了自己。

谢谢。

4

2 回答 2

0

在您的情况下最好使用字典。然后添加和定位正确的元素将是微不足道的。

所以,这是初始化:

products = new Dictionary<int, Farm_Shop>
    {
        { 1, new Farm_Shop(1, "Apple", "Fruit\t", 0.49, 40, 'n') },
        { 2, new Farm_Shop(2, "Orange", "Fruit\t", 0.59, 35, 'n') }
    };
basket = new Dictionary<int, Farm_Shop>();

这是补充:

int idToAdd = int.Parse(Console.ReadLine());
Farm_Shop selected;
if (products.TryGet(idToAdd, out selected))
{
    basket[idToAdd] = selected;
}

使用索引器(方括号)可确保在字典中已存在具有相同 ID 的项目时不会出现异常。

希望我能正确理解你的问题。

于 2013-10-28T14:04:10.050 回答
0
Farm_Shop selectedItem = products.Single(x => x.ID == idToAdd);
selectedItem.InBasket = 'y';
basket.Add(selectedItem);

如果您想要更有效的查找,您应该制作products一个将 ID 映射到项目的字典。那么第一行将变为:

Farm_Shop selectedItem = products[idToAdd];
于 2013-10-28T14:04:49.687 回答