Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136

Добавить элемент в лист моделей Add to AddRange

01.08.2019, 07:01. Показов 3575. Ответов 34

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
List<Repair_Report_Model> models = new List<Repair_Report_Model>();
        
            foreach (var item in jr_count_query)
            {
                Repair_Report_Model model = new Repair_Report_Model(); // крайне убого, апофеоз убожества
                model.Equipment = item.Name.TrimEnd(' ');
                model.MalfunctionCount = item.Count;
                models.Add(model);
            }
Как упростить данную конструкцию, скажем используя AddRange или еще что, чтобы убрать foreach?
Хотя главнее даже убрать инициализацию модели из foreach.
Мне сильно не нравится, что здесь каждый раз в цикле foreach объявляется экземпляр класса модели.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2019, 07:01
Ответы с готовыми решениями:

метод Add и AddRange
разбираюсь с ArrayList а именно на данном этапе смотрю методы Add и AddRange, вот например код ArrayList myStuff = new ArrayList(); ...

List.Add, когда добавляю новые элементы в list то весь лист заполняется этими элементами
List&lt;Employee&gt; emp = new List&lt;Employee&gt;(); string userAction = &quot;&quot;; int id = 0; ...

кнопка add (добавить форму)
Доброго времени суток, кнопка add при нажатии которой должно вставлятся новые формы такие же после нее, пробовал add(), clone(),...

34
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 06:07
Студворк — интернет-сервис помощи студентам
Umatkot_Primtep, куча разбивается на три блока под разные "поколения" объектов: нулевое (Эдем), первое и второе. И есть ещё LOH - Large Object Heap. Объекты помещаются либо в Эдеме, либо в LOH (если больше 85000 байт).

Обслуживать Эдем сборщику проще всего. Объём памяти Эдема небольшой и чистится он всегда полностью: что не выжило удаляется, остальное собирает вещички и переезжает в первое поколение. Т.е. Эдем заточен под короткоживущие объекты (которых создаётся много).

Вы можете почитать об этом у Рихтера или Гольдштейна. Да и на MSDN тоже эти вещи тайной не являются.
1
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
07.08.2019, 06:20  [ТС]
C#
1
2
3
4
foreach (var item in jr_count_query)
 {
string MText = "";
 }
Немного поменяю условие задачи. для каждой элемента теперь есть своя текстовая строка. По сути в этой строке перечень неполадок для каждого элемента.
C#
1
2
3
           models.AddRange(jl_group_query
                 .Select(x => new Repair_Report_Model()
                 { Equipment = x.Key.Name, MalfunctionTypes = // ?????? MText   }));
Как бы ее использовать, если она не является частью
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 06:23
streamc, где эта строка находится? В воздухе, что ли?
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
07.08.2019, 06:25  [ТС]
Usaga,

Внутри scope foreach string MText = "" объявляется каждый раз; В том то и дело, что не в воздухе.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 06:26
streamc, это и есть "в воздухе". Вне этого цикла этой строки нет. А значит и нечего пихать в LINQ-выражение.
1
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
07.08.2019, 06:30  [ТС]
Usaga,

Цитата Сообщение от Usaga Посмотреть сообщение
А значит и нечего пихать в LINQ-выражение.
С этим соглашусь. LINQ или не LINQ - не суть. Суть в отмене инициализации модели каждый раз была, но по ходу не катит.
Цитата Сообщение от Usaga Посмотреть сообщение
это и есть "в воздухе"
Нет, не в воздухе, а в scope цикла, не имеющем отношения к group by из выборки query.
Короче, верну, как было.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 06:32
Цитата Сообщение от streamc Посмотреть сообщение
Суть в отмене инициализации модели каждый раз была
Как вы собрались получать новый объект не создавая новый объект? Магией?
0
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
07.08.2019, 06:39  [ТС]
Usaga,

Жадным был. Причем зря. Все-равно при выходе из цикла, эти модели уничтожатся. Я хотел один большой лист моделей с добавлением данных для модели этого листа создать, а не с добавлением модели. Никакой магии или отмены очевидного.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 06:43
streamc, кто уничтожится? Вы модели в List<T> добавляете, который ссылки на них удерживает. Никто не уничтожится пока есть этот List.

Цитата Сообщение от streamc Посмотреть сообщение
Я хотел один большой лист моделей с добавлением данных для модели этого листа создать, а не с добавлением модели.
А данные эти где храниться будут? Очевидно, что или в модели или в куче массивов под каждый параметр из этих данных, что тоже самое по памяти, но сильно менее удобно и менее надёжно в работе.

Добавлено через 57 секунд
Вы перестановкой мест слагаемых сумму не уменьшите никак. Только беспорядка наплодить можете и всё.
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
07.08.2019, 10:09
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
Я в тот день потерял пол дня в поисках метода клонирования объекта....
Для одного объекта Object.MemberwiseClone. "Один объект на массив", насколько знаю, нет такого метода.
Но и оно того не стоит.
C# всё таки для другого предназначен.

И в тех исключительных случаях, когда копирование объектов может ускорить приложение, лучше сделать библиотеку на С++ и использовать её.
Но когда это может дать выигрыш? Чисто теоретически я себе могу представить какую-то заковыристую реализацию, но на практике....
Ведь в любом случае - это будет не глубокая копия... А для полной копии нужно всё равно проходить по всем внутренним ссылкам и под каждую опять таки запрашивать требуемый участок памяти.
Практическую целесообразность такого не могу себе представить.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
07.08.2019, 10:34
streamc, да, он прав, если хранить что-то памяти - то всё равно это придётся создавать оператором new, который как раз и выполняет всю сложную работу по размещению элементов в памяти и это не только в C# и .NET - вообще везде.
Единственно, если что-то оптимизировать, то нужно очень точно подбирать структуры данных для хранения

Элд Хасп, полностью согласен - я только ради эксперимента это делал и то - не получилось. Задачей было - просто создать массив одним new Type [] и потом, получить доступ к его каждому элементу по ссылке в памяти IntPtr и скопировать структуру, которая была инициализирована в другом участке памяти - тоже по IntPtr. Потом, если бы получилось, я бы сделал три Benchmarka - 1й) на new, 2й) на этот способ и 3й на десериализацию(вероятно, некоторые методы десериализации как - то без new обходятся - как Вы думаете?).
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
07.08.2019, 10:42
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
вероятно, некоторые методы десериализации как - то без new обходятся - как Вы думаете?
Если вы за XML или JSON - нет!
Они всегда работают через конструктор типа.
Поэтому одно из условий типа для сериализации - иметь конструктор без параметров.

Если "двоичная", то аналог Object.MemberwiseClone.
1
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
07.08.2019, 10:46
Элд Хасп, зато с пользой провёл время - пока ковырял, напоролся ещё вот на что https://github.com/neuecc/ZeroFormatter
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,043
07.08.2019, 11:02
Umatkot_Primtep, вы не забывайте, что "объект" представлен не только данными которые вы можете в его полях и свойствах найти, но и заголовком с SyncBlock'ом и Methods Table Pointer. Т.е. есть ещё и техническая информация дополнительная. Вы это тоже собирались через IntPtr руками создавать? А GC как бы вы научили работать с таким самодельным объектом?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
07.08.2019, 11:27
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
напоролся ещё вот на что https://github.com/neuecc/ZeroFormatter
Честно говоря не представляю, что может быть быстрее Net сериализаторов... Просто исходя из принципа их работы.
Предоставить дополнительные методы - это понимаю. Поэтому и распространён пакет Newtonsoft.Json. Но по скорости работы....
ООООчень сомневаюсь в эффективности (на практике) ZeroFormatter.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.08.2019, 11:27

Как добавить модуль (add-on) в QT Creator?
У меня QT Creator 2.6.2 Based on QT 5.0.1 Начиная с QT 5 из него убрали некоторые модули, а именно волнующий меня - QFtp Но исходные...

Как добавить новую запись в TdbGrid 7.0 (ValueItems.add) ?
Привет, не могу заставить программно заставить добавить новую запись в Tdbgrid1.Columns(2).ValueItems или как метод...

Как добавить файл в автозагрузку с помощью команды REG ADD?
интересует как можно добавить файл в автозагрузку через reg add

TTable - какие поля предлагает добавить Add Field и куда?
Доброго времени суток! Есть база данных сгенерированная с помощью ErWin, тип СУБД FoxPro. В Делфи обращение к ней и вывод данных...

Как добавить ограничение ввода в метод Add класса BindingSource<string>?
Под ограничением подразумеваю, то же, что и в СУБД. То есть необходимо, чтобы добавление строки отменялась, если оно не соответствует...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru