|
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
|
||||||
Изменить значения в структуре15.02.2013, 17:02. Показов 12183. Ответов 35
Метки нет (Все метки)
Как изменять значения в структуре?
0
|
||||||
| 15.02.2013, 17:02 | |
|
Ответы с готовыми решениями:
35
Как изменить все элементы в структуре одним действием Изменение значения в структуре Изменить программу так, чтобы вторая строка в динамической структуре затиралась |
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|||||||||||||||||
| 15.02.2013, 20:22 | |||||||||||||||||
|
Конечно же для меня не секрет, что в следующих случаях будет копирование
Можете тогда подсказать?
Или она создаться в стеке потом скопируется в метод Add в качестве параметра, и там создастся уже в куче?
0
|
|||||||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 20:24 | ||
|
Это если отбросить оптимизатор. Возможно, при включенной оптимизации код скомпилируется таким образом, чтобы новая структура создавалась сразу в массиве, минуя копирования. Тут уже пусть смотрят любители копаться в IL-коде.
1
|
||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 20:27 | |
|
Скорее всего все-таки создастся в стеке, скопируется и создастся в куче, просто без упаковки.
Спасибо вам.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 20:28 | ||
|
0
|
||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 20:32 | |
|
Ну с массивом вроде бы понятно. Ему всегда нужно определять размер.
А список? Если он использует массив, значит размерность массива при добавлении нужно всегда менять. Хотя наверное это тоже не очень ресурсоемкие операции.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 15.02.2013, 20:37 | |||
|
Инициализация нового списка без указания размера - массив длиной 0 элементов. Первое добавление: массив длиной 4 элемента. Последующие добавления при достижении лимита: текущая длина массива, помноженная на два (8, 16, 32, 64 и т.д.). Реальную длину внутреннего массива можно получить через свойство Capacity - поиграйтесь, посмотрите, как он изменяет размер при добавлении элементов. Это, конечно, детали реализации, но в целом в списке ничего хитрого нет - обычное манипулирование массивом. При большом количестве элементов - операция весьма затратная, именно поэтому размер каждый раз увеличивается в два раза - лишняя трата памяти за счет экономии на излишнем копировании. При использовании структур, кстати, операция будет длиться еще дольше, т.к. структура целиком хранится в массиве, а не ссылка, как в случае с ссылочными типами.
1
|
|||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 21:00 | |
|
Все стало куда понятнее, спасибо.
0
|
|
|
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
|
|
| 15.02.2013, 21:42 [ТС] | |
|
Прошу прощения, что прерываю серьезную дискуссию )) Про то, что менять значения я могу через временную переменную - понял (не ссылочный тип данных). А можно менять без метода "SetName"?
Структуру в класс вложил для того, чтобы показать, что она будет использоваться только этим классом; вместо просто 3 массивов.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 21:55 | ||
|
То есть метод-то вы вызвать сможете и компилятор вам, возможно, ничего не скажет, но вот данные в списке не изменятся.
0
|
||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||
| 15.02.2013, 22:13 | ||
|
Но конечно же нужно сделать поле либо публичным, через public, либо добавить свойство для доступа к этому полю. Добавлено через 6 минут Ну и конечно же это нужно делать не в foreach так как там нельзя менять значение полей. Добавлено через 2 минуты А нет, нельзя. Компилятор говорит, что через индексатор значение менять нельзя.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 22:14 | ||
|
Вернее, и изменить можно, но изменится копия структуры, а не оригинал, хранящийся в списке. Вот с "голыми" массивами совсем другое дело - там и менять можно, т.к. массивы заоптимизированы на полную катушку и там прямая адресация. Добавлено через 23 секунды Опоздал с ответом - уже сами проверили
0
|
||
|
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
|
|
| 15.02.2013, 22:17 [ТС] | |
|
Скажите, список структур в C# стоит использовать или обычно как-то по-другому делают?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 15.02.2013, 22:18 | ||
|
За решением использовать структуры должно стоять серьезное обоснование их необходимости.
0
|
||
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
||
| 15.02.2013, 22:24 | ||
|
Все это для того, что бы оперативная память не засорялась ненужными объектами. И конечно же, как мы все сегодня выяснили, вы должны предусмотреть поведение этой структуры в типизированных коллекциях, и т.д. . В остальных случаях, когда вам не требуется создание однотипных или даже одинаковых экземпляров типа используйте классы.
0
|
||
|
2 / 2 / 2
Регистрация: 18.08.2011
Сообщений: 51
|
|
| 15.02.2013, 22:40 [ТС] | |
|
А как мой пример будет выглядеть с классом вместо структуры. Только одно условие: метод "ShowInfo" должен остаться "public static" (и main тоже будет такой же).
Задача у меня немного другая (ее лучше сформулировать в отдельной теме, чтобы не было путаницы). Вкратце: мне надо считать из БД данные (два столбца таблицы: ID и Name) и вывести в ListView в единственную колонку с checkbox'ами только имя (ID - служебные значения, пользователю они не нужны). Пользователь отмечает галками нужные значения и соответствующие ID (список/массив/строка с разделителями) возвращаются для последующей обработки. Я и хотел считывать из БД в структуру (в этом примере - это имя и возраст), а чекбоксы бы записывались в логическую переменную при смене состояния. Для этой задачи структура тоже не нужна? Добавлено через 1 минуту Считывать из БД умею, листвью создавать тоже и т.д.
0
|
|
|
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
|
|
| 15.02.2013, 22:41 | |
|
просто поменяйте ключевое слово struct на class и все.
И уберите его из MyClass.
0
|
|
| 15.02.2013, 22:41 | |
|
Как присвоить значения структуре? Присвоение значения данным в структуре Функция, которая возвращает 2 значения в структуре Не могу присовить структуре значения и записать в файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|