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

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

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

Добрый день! Настал тот день, когда я решил зарегистрироваться на форуме, так как возникла проблемка. Попробую описать как можно подробнее. Рассчитываю на вашу помощь! Прошу прощения, если топик не в том разделе. Есть код, который использует список ( List ) для хранения класса ( Slot ). List наполняется следующим образом :
Листинг программы
  1. public List<Slot> slots = new List<Slot>();
  2. public int slotCount = 25;
  3. for(int i = 0; i < slotCount; i++)
  4. {
  5. Slot slot = new Slot();
  6. int count = i + 1;
  7. slot.id = count;
  8. slot.item = null;
  9. slots.Add(slot);
  10. }
Вот сам класс Slot :
Листинг программы
  1. public class Slot {
  2. public Item item;
  3. public int id;
  4. }
Вот дочерний класс Item, который используется в классе Slot :
Листинг программы
  1. public class Item {
  2. public int itemid; // ID предмета
  3. public string iName; // Имя предмета
  4. public int iSlotID; // Слот предмета
  5. }
У нас есть список предметов, который находится так-же в List<ItemData> внутри - itemid, iSlotID Теперь нам нужно наполнить переменную public Item item в классе Slot нашими предметами из List<ItemData> ориентируясь на iSlotID. В общем код :
Листинг программы
  1. public void AddItems(List<ItemData> itemdata){
  2. foreach(ItemData item in itemdata){
  3. var tempitem = new Item(); // Создаем пустой класс Item
  4. tempitem = GetItemByID(item.id); // Тут мы берем данные из XML и наполняем tempitem ими. В итоге мы получили Имя предмета из XML, ориентируясь на его ID переданный в List<ItemData>
  5. tempitem.iSlotId = item.slotId; // Тут мы берем слот айди из List<ItemData> и подставляем его к tempitem
  6. Slot tempslot = GetSlot(tempitem.iSlotId); // Ищем Слот по его ID из tempitem ( функция ниже )
  7. if(tempslot == null){ // Если не найден слот, тогда return;
  8. return;
  9. }
  10. // Так как слот найден подставляем ему класс Item в переменную.
  11. tempslot.item = tempitem;
  12. }
  13. }
  14. public Slot GetSlot(int slotid){
  15. for(int i=0;i<slots.Count;i++){
  16. if(slots[i].id == slotid){
  17. return slots[i];
  18. }
  19. }
  20. return null;
  21. }
В принципе это работает.. Есть только одно НО. Если, в 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
Листинг программы
  1. for(int i = 0; i < slotCount; i++)
  2. {
  3. Slot slot = new Slot();
  4. int count = i + 1;
  5. slot.id = count;
  6. slot.item = null;
  7. slots.Add(slot);
  8. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут