22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
||||||
.NET 4.x Как заполнить динамический массив?18.12.2016, 19:41. Показов 6919. Ответов 12
Метки нет Все метки)
(
Привет!
Сразу к делу. Есть код:
Если в коде не дописывать "= Nothing", то компилятор заранее предупредит, мол, переменная используется до присвоения ей значения. Дописывая это, мы лишь обманываем компилятор, но не решаем проблему. Как быть в такой ситуации, если цифру 99 мы никак не знаем наперед? Спасибо.
0
|
18.12.2016, 19:41 | |
Ответы с готовыми решениями:
12
Как создать глобальный динамический массив и заполнить его
Как записать значение в динамический двумерный массив |
![]() 1082 / 912 / 213
Регистрация: 29.09.2015
Сообщений: 1,015
|
|||||||||||
18.12.2016, 19:48 | |||||||||||
Ну во первых массив должен перед вставкой размечен
Или на худой конец
1
|
![]() 1082 / 912 / 213
Регистрация: 29.09.2015
Сообщений: 1,015
|
||||||
18.12.2016, 20:33 | ||||||
![]() Решение
1
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
||||||
19.12.2016, 22:45 [ТС] | ||||||
Sklifosofsky, следует отметить, что этот класс как-то странно себя ведет! В смысле что вроде добавляет туда данные, но считать эти данные по индексу получается, увы не всегда!
Я КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЮ использовать этот класс! Если уж используете, то смотрите в оба и все тщательно проверяйте на работоспособность. P. S.: В итоге решил свою проблему обычной переменной типа String, в которую помещал данные, разделяя их vbNewLine, а потом. Короче вот так:
0
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
||||||
19.12.2016, 23:33 [ТС] | ||||||
Sklifosofsky, вот пример где не работает.
В следующих пяти MsgBox, которые находятся между циклами уже полная фигня! В каждом из них уже находится информация только о последнем канале!!! Соответственно, после второго цикла, в выходном массиве мы получаем тупо дубликаты данных последнего канала! Объясните, как такое возможно? Добавлено через 13 минут Разве только у Вас будет звуковая карта на миллион каналов ![]()
0
|
Администратор
![]() ![]() |
||||||
19.12.2016, 23:34 | ||||||
![]() Решение
Stass48, насколько я понимаю ChannelInfoType это класс, а метод SomeFunction(ChCounter, Info) принимает второй аргумент как ByRef. Это означает что он модифицирует одно и то же значение которое и добавляется в List(Of ChannelInfoType). Также это означает что тип List(Of T) работает правильно. Причина ошибки в твоем непонимании работы ссылочных типов.
Исправить можно так:
1
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
|
19.12.2016, 23:43 [ТС] | |
OwenGlendower, тогда почему так?
Ведь если верить Вашему ходу мыслей, тогда бы новые данные не вывелись бы в этом сообщении. Но выводятся же! Почему? Добавлено через 1 минуту Все верно понимаете ![]()
0
|
![]() 1082 / 912 / 213
Регистрация: 29.09.2015
Сообщений: 1,015
|
||||||
19.12.2016, 23:47 | ||||||
![]() Решение
Сейчас вы узнаете о чем вы и не подозревали
![]() Объект класса передается в лист как ссылка и если вы меняете содержание уже ранее отправленного класса в List, то и соответственно в List'e в объекте отразятся эти изменения. Есть 3 варианта решения этой проблемы 1. Если ваш класс использует примтивы типа число, строка то можно его переделать в структуру 2. В класс добавить функцию
3. В вашем коде трудно извернуться. Но это выглядит следящим образом: перед каждым добавлением в лист следует создавать новый экземпляр вашего класса и копировать в него все данные поочередно (не самый ахти способ) Добавлено через 1 минуту OwenGlendower, как раз 3 способ описал =)
1
|
Администратор
![]() ![]() |
||||||
19.12.2016, 23:55 | ||||||
Потому что внутри цикла идет вывод одного текущего значения.
Добавлено через 5 минут Чтобы лучше понять что происходит подумай над следующим примером
1
|
22 / 22 / 7
Регистрация: 26.05.2011
Сообщений: 256
|
||||||
20.12.2016, 00:03 [ТС] | ||||||
OwenGlendower, Я понял, но блин, это дебилизм какой-то... Я то считаю что если это список, то и добавляются туда данные, а не ссылки на класс... Мда уж........ Я вчера полдня убил на это все в недоумении
![]() А оно вон какое хитрое... Добавлено через 6 минут OwenGlendower, Я прекрасно "прохавал" уже в чем фигня и почему так)) Но посмотрите на код, который дали с примером получения каналов BassAsio.dll на VB:
0
|
Администратор
![]() ![]() |
|
20.12.2016, 00:13 | |
Stass48, ничего хитрого здесь. Нужно всего лишь понимать как работают ссылочные типы. Советую заполнить этот пробел в своих знаниях т.к. это фундаментальная вещь. Вот хорошая статья по теме - Reference Types, Value Types, ByVal, ByRef. Плюс советую прочитать книгу Джеффри Рихтера CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#. Всю книгу сразу читать не обязательно. Достаточно несколько первых глав где он подробно объясняет внутреннее устройство .NET.
Добавлено через 2 минуты Stass48, VB и VB.NET это два совершенно разных языка. Единственное что их объединяет это слова Visual Basic в названии.
1
|
20.12.2016, 00:13 | ||||||
Помогаю со студенческими работами здесь
13
Как заполнить двумерный динамический массив? Как заполнить двумерный динамический массив?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|