将Generic Collection的元素复制到C#中的另一个Collection

时间:2013-10-28 13:52:24

标签: c# arrays list arraylist generic-collections

基本上,我试图询问用户产品的ID号,然后将带有该号码的元素复制到新的Collection中。

我在这里添加了产品。

    //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 for Apple”。我接下来要做的就是将“Apple”系列中的所有信息添加到新的Collection中。

//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号然后将其与所有数组中的whats进行比较,然后将带有该ID的数组添加到其中并将其添加到新系列。

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

感谢。

2 个答案:

答案 0 :(得分:0)

最好在你的情况下使用Dictionary。因此,正确元素的添加和定位将是微不足道的。

所以,这是初始化:

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的项目已存在于字典中时不会出现异常。

希望我理解你的问题。

答案 1 :(得分:0)

Farm_Shop selectedItem = products.Single(x => x.ID == idToAdd);
selectedItem.InBasket = 'y';
basket.Add(selectedItem);

如果您想要更有效的查找,您应该使products字典将ID映射到项目。然后第一行将成为:

Farm_Shop selectedItem = products[idToAdd];
相关问题