Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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#_Data Structures - Fatal编程技术网

C# 专用现场库存的适当数据结构

C# 专用现场库存的适当数据结构,c#,data-structures,C#,Data Structures,我正在从事一项涉及管理产品库存的任务。具体地说,我们得到了一个要实现的接口IProduct和inventory。大部分都很简单,但我遇到了设计障碍,我想知道最佳实践 对于清单类的支持字段,我有两种选择:List或Dictionary(自定义类可能有点过头)。任务要求我们: 编写一个方法,允许用户将项目添加到您的库存中 不允许添加重复项(同名项) 实现索引器(以便myInv[myItemName]应返回与myItemName对应的项) 编写一个方法,按名称的字母顺序返回项目列表 考虑到这些要求

我正在从事一项涉及管理产品库存的任务。具体地说,我们得到了一个要实现的接口IProduct和inventory。大部分都很简单,但我遇到了设计障碍,我想知道最佳实践

对于清单类的支持字段,我有两种选择:List或Dictionary(自定义类可能有点过头)。任务要求我们:

  • 编写一个方法,允许用户将项目添加到您的库存中
  • 不允许添加重复项(同名项)
  • 实现索引器(以便myInv[myItemName]应返回与myItemName对应的项)
  • 编写一个方法,按名称的字母顺序返回项目列表
考虑到这些要求,我正要跳进去,将私有字段变成一本词典,但随后我看到了要求:

  • 编写一个方法,按照项目添加到库存的顺序返回项目列表
我想知道在这种情况下最好的行动方案是什么。我在两个想法之间摇摆不定:

  • 创建两个私有支持字段,一个列表和一个字典,但这看起来既笨拙又不雅观
  • 使用一个列表,并针对前四个需求跳过几个环(比如为索引器编写一个循环,然后在要求按字母顺序排序时制作一个排序副本)

  • 我应该采取上述哪些行动,还是应该采取完全不同的行动

    我将它实现为
    列表
    (或表示库存项目的任何特定类)的包装器。大概是这样的:

    public class Inventory {
        private List<InventoryItem> inner = new List<InventoryItem>();
    
        public void Add(InventoryItem item) {
            if (inner.Exists(x => x.Name == item.name)) {
                throw new ArgumentException("Duplicate item");
            } else {
                inner.Add(item)
            }
        }
    
        public List<InventoryItem> OrderedByName() {
            return inner.OrderBy(x => x.Name);
        }
    
        public List<InventoryItem> OrderedByDate() {
            return inner;
        }
    
        public InventoryItem this[int i] {
            get {
                return inner[i]
            }
        }
    }
    
    公共类目录{
    私有列表内部=新列表();
    公共作废添加(InventoryItem){
    if(inner.Exists(x=>x.Name==item.Name)){
    抛出新的ArgumentException(“重复项”);
    }否则{
    内部。添加(项目)
    }
    }
    公共列表OrderedByName(){
    返回inner.OrderBy(x=>x.Name);
    }
    公共列表OrderedByDate(){
    返回内部;
    }
    公共库存项目本[int i]{
    得到{
    返回内部[i]
    }
    }
    }
    
    为什么不保留一个列表,这将是您的插入顺序。当需要打印排序时,使用LINQ查询并按字母顺序排序。我们还没有找到LINQ,但我似乎可以通过返回排序数组的副本来执行类似的操作。