Member 10980668 Ответов: 3

В общем пользовательском списке перезапись существующего элемента.


У меня есть пользовательский класс, содержащий три открытые переменные строкового типа. Я создаю его список так, чтобы добавить как можно больше элементов этого типа. но при добавлении списка list.Add (item) list заканчивается написанием последнего элемента для каждого из них. следующий код


публичный класс QuizSearchListVariable{

общественного строка quiz_type_id;
общественного строка quiz_type_title;
общественного строка quiz_type_description;
общественного недействительными понятно()
{
quiz_type_id = строка.Пустой;
quiz_type_title = строка.Пустой;
quiz_type_description = строка.Пустой;
}

public override string ToString ()
{
возвращенная строка.Формат ("[QuizSearchListVariable] \n Quiz_Type_ID={0} \n Quiz_Type_Title={1} \n Quiz_Type_Description={2}", quiz_type_id, quiz_type_title, quiz_type_description);
}

Что я уже пробовал:

/ Добавление элементов отсюда

for (int i = 0; i < data ["quiz_list"].Граф; i++) {
Obj1.Понятно ();
Obj1.quiz_type_id = (строку)данных ["quiz_list"] [я] ["идентификатор"];
Obj1.quiz_type_title = (строку)данных ["quiz_list"] [я] ["название"];
Obj1.quiz_type_description = (строку)данных ["quiz_list"] [я] ["описание"];
MyQuizList. Add (Obj1);
QuizTitleList.Добавить (данные ["quiz_list"] [я] ["название"].ToString (). ToLower ());

3 Ответов

Рейтинг:
2

F-ES Sitecore

Вам нужно понять, как работают ссылочные переменные

for (int i = 0; i < data ["quiz_list"].Count; i++) {
    Obj1.Clear ();
    // ...
    MyQuizList.Add (Obj1);

Существует только одна копия Obj1, и вы очищаете его данные, устанавливаете его данные и добавляете его в список, однако вы только добавляете один и тот же объект несколько раз, у вас нет разных копий элемента.

Представьте, что у вас есть сумка, и внутри этой сумки вы кладете "квадрат", и вы заставляете кого-то держать это плохо. Затем вы очищаете сумку, убираете квадрат, кладете в него "круг" и говорите кому-то другому держать сумку. Итак, у вас есть один мешок, который держат оба человека, и этот мешок содержит круг.

Что вы действительно хотите сделать, так это создать новую сумку, а не очистить существующую, поэтому у вас есть одна сумка с квадратом и одна с кругом. Поэтому замените Clear созданием нового экземпляра.

for (int i = 0; i < data ["quiz_list"].Count; i++) {
    Obj1 = new QuizSearchListVariable();
    // ...
    MyQuizList.Add (Obj1);


Рейтинг:
1

BillWoodruff

Ваш код использует один экземпляр класса, 'Obj1, неоднократно и добавляет этот же экземпляр в список. Да, вы очищаете поля этого экземпляра ' Obj1 и записываете новые значения, но ссылка to ' Obj1 остается неизменным; в конце концов, у вас есть несколько ссылок на 'Obj1 в вашем списке' MyQuizList, и все они содержат последние значения, которые вы написали.

Итак, вам нужно создавать новый экземпляр вашего класса с каждой итерацией цикла:

Obj1 = new QuizSearchListVariable();


Рейтинг:
0

onelopez

вы продолжаете передавать один и тот же объект ссылки в список. нужно каждый раз создавать новый объект и заполнять его новыми полями, иначе предыдущие объекты будут иметь новые значения, так как это только ссылка.