Перезапись класса в 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д