【问题标题】:Copy element of Generic Collection to another Collection in C#将通用集合的元素复制到 C# 中的另一个集合
【发布时间】:2013-11-07 07:58:29
【问题描述】:

基本上,我试图向用户询问产品的 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 的数组并将其添加到新系列。

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

谢谢。

【问题讨论】:

    标签: c# arrays list arraylist generic-collections


    【解决方案1】:
    Farm_Shop selectedItem = products.Single(x => x.ID == idToAdd);
    selectedItem.InBasket = 'y';
    basket.Add(selectedItem);
    

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

    Farm_Shop selectedItem = products[idToAdd];
    

    【讨论】:

      【解决方案2】:

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

      所以,这是初始化:

      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 的项目时不会出现异常。

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

      【讨论】:

      • 我收到一条错误消息:“无法将类型 'Farm_Shop_Assignment.Farm_Shop' 隐式转换为 'Farm_Shop_Assignment.Basket'”
      • 您可能已经创建了 basket 作为从 intBasket 的字典。你不能把商店放在篮子里。
      猜你喜欢
      • 2016-02-28
      • 2013-01-10
      • 2010-09-13
      • 2011-06-22
      • 1970-01-01
      • 2011-10-28
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多