Перезапись класса в List - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Настал тот день, когда я решил зарегистрироваться на форуме, так как возникла проблемка. Попробую описать как можно подробнее. Рассчитываю на вашу помощь! Прошу прощения, если топик не в том разделе. Есть код, который использует список ( List ) для хранения класса ( Slot ). List наполняется следующим образом :
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);
}
Вот сам класс Slot :
public class Slot {
 
public Item item;
public int id;
 
}
Вот дочерний класс Item, который используется в классе Slot :
public class Item {
 
public int itemid; // ID предмета
public string iName; // Имя предмета
public int iSlotID; // Слот предмета
 
}
У нас есть список предметов, который находится так-же в List<ItemData> внутри - itemid, iSlotID Теперь нам нужно наполнить переменную public Item item в классе Slot нашими предметами из List<ItemData> ориентируясь на 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<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

Решение задачи: «Перезапись класса в 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);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5