Словарь предметов с унаследованными классами - PullRequest
0 голосов
/ 05 января 2019

Я довольно новичок в кодировании, так что это не может быть "оптимальным" способом ведения дел, но по сути, у меня есть что-то вроде этого:

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>();

Где ключ - itemID, а Item - Item. Таким образом, у меня есть своего рода база данных, чтобы дать ей itemID, и она выплевывает соответствующий элемент. Проблема заключается в том, что если я добавлю класс Tool в этот словарь, если я попытаюсь получить доступ к значению словаря, он не даст доступа к переменным Tool (поскольку в словаре указан только класс "item" верхнего уровня) .

Если я создаю несколько разных унаследованных классов, как мне настроить словарь, чтобы позволить мне получить правильный класс / тип элемента из словаря на основе его itemID. Спасибо заранее.

1 Ответ

0 голосов
/ 05 января 2019

Вы можете сделать следующее.

Для ввода

Dictionary<int,Item> itemDict = new Dictionary<int,Item>
{
  [1] = new Item(){itemID = 2},
  [2] = new Tool(){itemID=3, toolDurability=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;
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...