Перезапись класса в List - C#
Формулировка задачи:
Добрый день!
Настал тот день, когда я решил зарегистрироваться на форуме, так как возникла проблемка. Попробую описать как можно подробнее. Рассчитываю на вашу помощь!
Прошу прощения, если топик не в том разделе.
Есть код, который использует список ( List ) для хранения класса ( Slot ).
List наполняется следующим образом :
Вот сам класс Slot :
Вот дочерний класс Item, который используется в классе Slot :
У нас есть список предметов, который находится так-же в List<ItemData> внутри - itemid, iSlotID
Теперь нам нужно наполнить переменную public Item item в классе Slot нашими предметами из List<ItemData> ориентируясь на iSlotID. В общем код :
В принципе это работает.. Есть только одно НО.
Если, в List<ItemData> есть 2 одинаковых id предмета, но с разными слотами, в конце выполнения мы получим результат такой, что у обоих предметов будет одинаковый слотайди.
Вывод дебага будет такой :
slots.id : 1 / slots.item.iSlotID : 4 / slots.item.itemid : 1001
slots.id : 2 / slots.item.iSlotID : 2 / slots.item.itemid : 1002
slots.id : 4 / slots.item.iSlotID : 4 / slots.item.itemid : 1001
Должно быть так:
slots.id : 1 / slots.item.iSlotID : 1 / slots.item.itemid : 1001
slots.id : 2 / slots.item.iSlotID : 2 / slots.item.itemid : 1002
slots.id : 4 / slots.item.iSlotID : 4 / slots.item.itemid : 1001
Листинг программы
- public List<Slot> slots = new List<Slot>();
- public int slotCount = 25;
- for(int i = 0; i < slotCount; i++)
- {
- Slot slot = new Slot();
- int count = i + 1;
- slot.id = count;
- slot.item = null;
- slots.Add(slot);
- }
Листинг программы
- public class Slot {
- public Item item;
- public int id;
- }
Листинг программы
- public class Item {
- public int itemid; // ID предмета
- public string iName; // Имя предмета
- public int iSlotID; // Слот предмета
- }
Листинг программы
- public void AddItems(List<ItemData> itemdata){
- foreach(ItemData item in itemdata){
- var tempitem = new Item(); // Создаем пустой класс Item
- tempitem = GetItemByID(item.id); // Тут мы берем данные из XML и наполняем tempitem ими. В итоге мы получили Имя предмета из XML, ориентируясь на его ID переданный в List<ItemData>
- tempitem.iSlotId = item.slotId; // Тут мы берем слот айди из List<ItemData> и подставляем его к tempitem
- Slot tempslot = GetSlot(tempitem.iSlotId); // Ищем Слот по его ID из tempitem ( функция ниже )
- if(tempslot == null){ // Если не найден слот, тогда return;
- return;
- }
- // Так как слот найден подставляем ему класс Item в переменную.
- tempslot.item = tempitem;
- }
- }
- public Slot GetSlot(int slotid){
- for(int i=0;i<slots.Count;i++){
- if(slots[i].id == slotid){
- return slots[i];
- }
- }
- return null;
- }
Решение задачи: «Перезапись класса в List»
textual
Листинг программы
- for(int i = 0; i < slotCount; i++)
- {
- Slot slot = new Slot();
- int count = i + 1;
- slot.id = count;
- slot.item = null;
- slots.Add(slot);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д