У меня есть список элементов типа Texture (пользовательский класс с некоторыми свойствами). Я могу изменить данные одного из элементов в этом списке, но когда я их сохраняю, а в списке больше, чем один, он, похоже, делает новую копию в этом списке.Изменение элемента списка <Texture> создает новый элемент
Прежде всего это объявление списка Texture, который находится в статическом классе (MainData):
public static List<Texture> Textures = new List<Texture>();
А вот код, который изменяет данные в соответствии с, возможно, данные о том, что был заполнен пользователем:
for (int t = 0; t < MainData.Textures.Count; ++t)
{
if (MainData.Textures[t].Path == texture.Path)
MainData.Textures[t] = texture;
else
MainData.Textures.Add(texture);
}
Я понятия не имею, почему он это делает. И это происходит только в том случае, если в списке содержится более одного элемента. Есть ли что-то очевидное? Я ошибаюсь в этом?
Итак, я просто хочу иметь возможность изменять данные в списке для выбранного элемента. (Я проверяю список для пути текстуры, чтобы узнать, какой из них был изменен, потому что это статическое значение, которое не будет изменено во всей программе).
Ваша последняя строка добавляет новый элемент в список – Alex
Вы добавляете новую текстуру для * каждого * элемента в существующий список, который не имеет соответствующего 'Path'. Я бы подумал, что вам нужна логика: если * любой * элемент в списке имеет соответствующий «Путь», замените его. Если вы достигнете конца цикла for, не сделав этого, _then_ добавьте новый элемент (один раз). – CompuChip
'Main.Textures.Add' добавит новый элемент в список. Поместите точку останова на условие 'if' и проверьте данные, над которыми вы работаете. Что-то заставляет вас попасть в состояние 'else'. –