Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31

Обнуляется вложенный список

28.03.2014, 07:33. Показов 4306. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Hello. Есть класс.
C#
1
2
3
4
5
6
class ClassRegex
{
Regex r;
public string d;
List<ClassRegex> crlist;
}
Идея в том, что идет перебор foreach'ем 1 элемента, если результат есть, то заходит в crlist и перебирает там значения.
Заполнение
C#
1
2
3
4
5
6
7
8
9
MVTTypes.Clear();
List<ClassRegex> Types = new List<ClassRegex>();
List<ClassRegex> Par = new List<ClassRegex>();
Par.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
Par.Add(new ClassRegex { r = new Regex(@"(^|\n)(RC)"), d = "RC" });
Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AD)"), d = @"Departure message", crlist = Par });
Par.Clear();
 
... etc.
После Clear crlist в Types тоже очищается
Вопросы:
1) Очищается из-за того что в crlist помещается ссылка на Par?
2) Как реализовать такое дело иначе, кроме как создавать новые листы этого класса и добавлять уже их?
Спасибо за внимание.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2014, 07:33
Ответы с готовыми решениями:

Обнуляется переменная
using System; namespace ConsoleApp6 { class Program

Обнуляется переменная
Добрый день. Сразу предупреждаю, мягко говоря, код не очень красивый. Проблема такая, есть 2 класса. Первый: using System; using...

ссылка обнуляется, хотя не должна
Есть класс операций с БД class DataBaseOperations:IDisposable { static string defaultConnString = &quot;Data...

6
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
28.03.2014, 13:15
Цитата Сообщение от juninhonvp Посмотреть сообщение
Идея в том, что идет перебор foreach'ем 1 элемента, если результат есть, то заходит в crlist и перебирает там значения.
Вот откуда мы знаем, что в этом словесном алгоритме нет ошибок, которые вы спрашиваете? Хотите полный ответ? Выложите полный код!
0
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
28.03.2014, 13:23  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void InitializeMVTTypesList()
    {
      Types.Clear();
      List<ClassRegex> Par1 = new List<ClassRegex>();
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(RC)"), d = "RC" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(PX)"), d = "RC" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(EB)"), d = "EB" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
      Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AD)(\d{2})?(\d{4})(\/(\d{2})?(\d{4}))? EA(\d{4}) ([A-Za-z]{3})"), d = @"Departure message", crlist = Par1 });
      Par1.Clear();
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)(\d{2})"), d = "FLD" });
      Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AA)((\d{2})?(\d{4})(\/(\d{2})?(\d{4}))?)?"), d = "Arrival message", crlist = Par1 });
      Par1.Clear();
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(NI)"), d = "NI" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
      Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
      Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(ED)"), d = "Delay message", crlist = Par1 });
    }
Если это поможет, пожалуйста. Запускается эта функция 1 раз, для формирования массива Types (объявлен глобально).
C#
1
List<ClassRegex> Types = new List<ClassRegex>();
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
28.03.2014, 13:43
Либо вы что-то не договариваете, либо не весь код выложили. Вот как я написал, у меня ничего не обнуляется.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Program
    {
        public static List<ClassRegex> Types = new List<ClassRegex>();
 
        static void Main(string[] args)
        {
            InitializeMVTTypesList();
        }
 
        private static  void InitializeMVTTypesList()
        {
            Types.Clear();
            List<ClassRegex> Par1 = new List<ClassRegex>();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(RC)"), d = "RC" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(PX)"), d = "RC" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(EB)"), d = "EB" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AD)(\d{2})?(\d{4})(\/(\d{2})?(\d{4}))? EA(\d{4}) ([A-Za-z]{3})"), d = @"Departure message", crlist = Par1 });
            Par1.Clear();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)(\d{2})"), d = "FLD" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AA)((\d{2})?(\d{4})(\/(\d{2})?(\d{4}))?)?"), d = "Arrival message", crlist = Par1 });
            Par1.Clear();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(NI)"), d = "NI" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(ED)"), d = "Delay message", crlist = Par1 });
        }
    }
 
    class ClassRegex
    {
        public Regex r;
        public string d;
        public List<ClassRegex> crlist;
    }
0
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
28.03.2014, 14:01  [ТС]
в Types для записей количество в crlist 5, 1, 3 соответственно?
http://yadi.sk/d/8gINKab3LMr67 тут должно быть 5 записей, а по факту к концу их 3, и так у каждой строки листа Types.
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
28.03.2014, 14:25
Лучший ответ Сообщение было отмечено juninhonvp как решение

Решение

А в этом плане. Ну естественно. Лист это ссылочная переменная. Вы вместа клона тупо записываете адрес на одну и ту же область памяти. Чему тут удивляться. Вот я вам исправил.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            Types.Clear();
            List<ClassRegex> Par1 = new List<ClassRegex>();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(RC)"), d = "RC" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(PX)"), d = "RC" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(EB)"), d = "EB" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AD)(\d{2})?(\d{4})(\/(\d{2})?(\d{4}))? EA(\d{4}) ([A-Za-z]{3})"), d = @"Departure message", crlist = new List<ClassRegex>(Par1) });
            Par1.Clear();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)(\d{2})"), d = "FLD" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(AA)((\d{2})?(\d{4})(\/(\d{2})?(\d{4}))?)?"), d = "Arrival message", crlist = new List<ClassRegex>(Par1) });
            Par1.Clear();
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(NI)"), d = "NI" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(FLD)"), d = "FLD" });
            Par1.Add(new ClassRegex { r = new Regex(@"(^|\n)(DL)"), d = "DL" });
            Types.Add(new ClassRegex { r = new Regex(@"(^|\n)(ED)"), d = "Delay message", crlist = new List<ClassRegex>(Par1) });
            int count1 = Types[0].crlist.Count;
            int count2 = Types[1].crlist.Count;
            int count3 = Types[2].crlist.Count;
1
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
28.03.2014, 14:38  [ТС]
Большое спасибо, это то что надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2014, 14:38
Помогаю со студенческими работами здесь

Почему элемент обнуляется входя в цикл?
сортировать список написал, при входе в цикл фор root стает = null хоть до него я ему присвоил указатель на 1 елемент root = first; почему...

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

Обнуляется счетчик в цикле foreach рекурсивной функции
Вызываю функцию: Передаю значение count = 0. private void сlearFs_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) ...

Объект самопроизвольно обнуляется или тайна библиотеки xNet
Прикручиваю к своему проекту прокси, использую библиотеку xNet, библиотека удобная, спасибо автору, но объект response самопроизвольно...

При возвращение метода переменная int с каждый раз обнуляется
При возвращение метода переменная int с каждый раз обнуляется, Нужно сделать чтобы ноль присваивался только один раз. Не знаю как сделать,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru