![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Допустим, есть класс с, создаю массив
c[] arr = new c[10]; Все элементы массива оказываются несозданными. Создаю их при помощи for (int i = 0; i<arr.Length; i++) c[i] = new c(); А есть какой-то более красивый метод создавать массивы с уже созданными объектами -------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Только такой
Кста, foreach работает быстрее for А лучше всего сделать с не классом, а структурой. Структура всегда инициализированна значением по умолчанию |
|||
|
||||
| Prehistorik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
Нет. Представь себе, что у тебя конструктор не поумолчанию, а с параметрами. И как компилятор поймёт, какие параметры, какому классу сунуть?
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
ivashkanet, foreach перебирает элементы только для чтения, тоесть, вызвать конструктор не получится
Prehistorik, спасибо что объяснил -------------------- ![]() |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
ivashkanet, переменные итерации foreach неизменяемы.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
Вот так мона (конструктор без параметров)
Вообще new С[n] создает ссылку на массив и соответственно выделяет память под n ссылок в куче. Но .Net требует , что бы при обращении к элементу массива, он был связан с реальным объектом - иначе Exception. Поэтому инициализировать обязательно for-ом или как написано выше. Вот только разом указать инициализирующую переменную для всех экземпляров массива у меня не получилось... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Sartorius, вообще это и не нужно
-------------------- ![]() |
|||
|
||||
| RobbieV |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
Думаю, можно поступить так, создать такой класс и юзать его для инициализации твоих массивов:
Вот пример, как его можно использовать:
Но только для C# не ниже 2.0. Это сообщение отредактировал(а) RobbieV - 25.7.2006, 23:42 |
||||
|
|||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Блин, а я не знал (вернее знал, но забыл) и работал Правда у меня VB .Net Пример:
|
||||
|
|||||
| Prehistorik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
ivashkanet, заметь, ты не изменяешь row... ты просто с его свойством работаешь... Хотя интересно... Ща попробую....
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Правда я саму переменную не менял, а только объект который лежит по адресу содержащемуся в переменной.
P.S. А на кой такое ограничение |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Занялся тестрованием такой ситуации, оказалось:
В foreach можно менять только элементы объекта итерации, но не сам объект. В VB можно попытаться изменить и его (ошибки компиляции не будет, и в IL все перенесется нормально), но тольку от этой операции 0. Объект будет все равно старым Вот такие косяки И еще хочу напомнить: |
|||
|
||||
| Prehistorik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
ivashkanet, Я думаю, что такое ограничение нужно для того, чтобы подтверждался известный тезис МелкоЛегко, что foreach безопаснее for.
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Мне просто foreach нравится намного больше for Ы? MS? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
-------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |