C# 具有继承类的项字典

C# 具有继承类的项字典,c#,C#,我有这样的想法: public class Item { public int itemID; public string itemName; } public class Tool : Item { public int toolDurability; } 我想创建一个字典,比如 public Dictionary<int,Item> itemDic = new Dictionary<int,Item>(); public Dictiona

我有这样的想法:

public class Item
{
    public int itemID;
    public string itemName;
}

public class Tool : Item
{
    public int toolDurability;
}
我想创建一个字典,比如

public Dictionary<int,Item> itemDic = new Dictionary<int,Item>();
public Dictionary itemDic=new Dictionary();
其中键是
itemID
,而
项是
项。这样我就有了一种数据库,可以给它一些
itemID
,然后它会返回相应的项。问题是,如果我将类
工具
添加到此字典,如果我尝试访问字典值,它将不会访问
工具
变量(因为字典仅指定顶级“item”类)


如果我创建了几个不同的继承类,我将如何设置字典以允许我根据其
itemID
从字典中获取正确的类/类型的项?

您可以执行以下操作

作为输入

Dictionary<int,Item> itemDict = new Dictionary<int,Item>
{
  [1] = new Item(){itemID = 2},
  [2] = new Tool(){itemID=3, toolDurability=4}
};
Dictionary itemDict=新字典
{
[1] =新项(){itemID=2},
[2] =新工具(){itemID=3,toolbutrability=4}
};
你可以

foreach(KeyValuePair<int, Item> entry in itemDict)
{

  switch(entry.Value)
  {
    case Tool tool:
      Console.WriteLine(tool.toolDurability);
      break;
    case Item item:
      Console.WriteLine(item.itemID);
      break;
   }
 }
foreach(itemDict中的KeyValuePair条目)
{
开关(输入值)
{
案例工具:
控制台写入线(工具耐久性);
打破
案例项目:
Console.WriteLine(item.itemID);
打破
}
}

您可以执行以下操作

作为输入

Dictionary<int,Item> itemDict = new Dictionary<int,Item>
{
  [1] = new Item(){itemID = 2},
  [2] = new Tool(){itemID=3, toolDurability=4}
};
Dictionary itemDict=新字典
{
[1] =新项(){itemID=2},
[2] =新工具(){itemID=3,toolbutrability=4}
};
你可以

foreach(KeyValuePair<int, Item> entry in itemDict)
{

  switch(entry.Value)
  {
    case Tool tool:
      Console.WriteLine(tool.toolDurability);
      break;
    case Item item:
      Console.WriteLine(item.itemID);
      break;
   }
 }
foreach(itemDict中的KeyValuePair条目)
{
开关(输入值)
{
案例工具:
控制台写入线(工具耐久性);
打破
案例项目:
Console.WriteLine(item.itemID);
打破
}
}

如果(项目是工具){((工具)项目).toolDutability=42;}
如果仍然必须访问特定属性,那么进行抽象(项目)有什么意义?这看起来像是糟糕的设计。如果(项目是工具){((工具)项目){((工具)项目)。工具耐久性=42;},则可能重复
如果仍然必须访问特定属性,那么进行抽象(项目)有什么意义?这看起来像是糟糕的设计。可能是重复的