Перезапись класса в 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);
}