У меня возникла небольшая проблема с изменением элементов объекта в списке с использованием найденного индекса.C# Изменение объектов в списке
Так что это метод, который я в настоящее время работаю с:
static void addToInventory(ref List<baseItem> myArray, baseItem item, float maxAmount, ref float currentAmount)
{
if (currentAmount + item.getWeight() <= maxAmount)
{
Console.WriteLine("item.Quantity = {0}", item.Quantity);
if (myArray.Contains(item))
{
Console.WriteLine("Item ({0}) already exists", item.Name);
int id = myArray.IndexOf(item);
myArray[id].Quantity += item.Quantity;//Change occurs in this line, item.Quantity becomes the same as myArray[id].Quantity
}
else
{
Console.WriteLine("Adding new item ({0})", item.Name);
myArray.Add(item);
}
currentAmount += item.getWeight();
}
else
{
Console.WriteLine("Inventory full");
}
myArray.Sort();
}
Этот метод принимает несколько параметров, в том числе инвентаризации/список. Я проверяю, подходит ли элемент, и если да, я вижу, есть ли в списке другой элемент с тем же именем, найдите индекс и добавьте больше элемента. Однако количество добавленного предмета внезапно становится таким же, как и количество элемента в списке. По какой-то причине это также изменяет количество элемента вне списка. Поэтому, вместо количества, складывающегося следующим образом: 1, 2, 3, 4, они складываются следующим образом: 1, 2, 4, 8. Как я могу сделать так, чтобы количество добавленного элемента не изменилось?
Я только начал изучать, как использовать списки, поэтому, если есть что-то, что мне не хватает, не стесняйтесь критиковать. Заранее спасибо.
Отметить: Спасибо за самый быстрый ответ! Извините за плохое имя (myArray); это был ArrayList. CurrentAmount и maxAmount относятся к текущему весу в инвентаре и максимальному весу, который может содержать инвентарь. Кроме того, я не хочу просто добавлять 1 к количеству; Я хочу, чтобы он добавил количество предметов, в которые я проходил. Спасибо за советы. Я, вероятно, займусь использованием словаря.
По теме, связанной с неродственными темами, я не понимаю, почему параметр List myArray является ref. –
Я думал, что ref разрешит список, в который я прошел, чтобы быть затронутым. – kwong22
В этом случае это не обязательно. Вы должны прочитать Передача Параметров в C# (http://www.yoda.arachsys.com/csharp/parameters.html). –