![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ClockWork |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Суть вот в чем. У меня есть программа, в которую нужно ввести данные. Данные вводятся либо с клавиатура, либо из файла. В начале я спрашиваю у пользователя как именно он хочет вводить данные и в зависимости от его выбора реализую разные блоки кода. Делаю все это через switch и case-ы. Так вот далее в этих блоках case у меня просходит декларирование массива, его инициализация и наполнение данными. Декларирование происходит только в 2 ветвях (всего их 3), в default оно (декларирование) отсутсвует и "бросается" исключение. Так вот, если я продекларировал и наполнил массив обьектов определенного класса данными в блоке switch, то за пределами этого блока этот массив не виден (не существует). Вопрос: как можно найти выход из такой ситуации. Наверняка кто-нибудь сталкивался.. Что посоветуете? |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
определяй массив вне блока switch
и вообще не помешало бы немного кода увидеть --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| ClockWork |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Я бы рад определять массив вне блока, но это очень неудобно, поскольку его размерность задается либо с клавы (case 1), либо из файла (case 2) - для этого мне switch и нужен. Хотя, если другого способа нет, то буду делать так. :( Код можете заценить:
Маленькое уточнение. Операция ввода данных из файла пока не реализована, в case 2 просто ссылка на case 1. Ну я думаю вы и сами это сразу поняли. Это сообщение отредактировал(а) ClockWork - 12.3.2007, 18:47 |
||||
|
|||||
| agl |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Объявлять массив ты можешь вне switch, а new делать в своих блоках. В С# массивы динамическии.
|
||||
|
|||||
| nikitao |
|
||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Хотя я бы List заюзал Это сообщение отредактировал(а) nikitao - 12.3.2007, 20:40 -------------------- Жизнь - печальная штука. |
||||
|
|||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А я не заметил двух разных ветвей, case 1 и case 2 делают одно и то же. Не лучше ли выделить эти действия в отдельный метод. Потому как, ИМХО, goto ломает всю модель ООП. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
--------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| ClockWork |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
nikitao,
Спасибо. Так все работает. Просто я думал, что в C# чтобы обозначить массив, надо знать его length сразу. хм.. Без паники. goto в данном случае используется совсестно с case. А это не только никак на ломает концепцию ООП, но даже рекомендовано разработчиками C#. Кстати в данном случае goto я там поставил просто "от нечего делать". Просто не успел дописать код, чтоб инфа бралась из файла и поставил ссылку на case 1. В смысле? ArrayList? Я просто создаю массив объектов специфического класса, который сам описал. Как тут лист можно заюзать? Это сообщение отредактировал(а) ClockWork - 13.3.2007, 15:07 |
|||
|
||||
| agl |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Очень просто, ArrayList имеет тип object - базовый тип для ВСЕХ типов, как пользовательских так и системных. В нём можно хранить объекты любого класса, более того, сохраняемые в нём объекты могуть быть разных типов. Тип сохраняемого объекта узнается просто:
Update: Добавление объекта в список: arList.Add(new myObject()); И при распоковке нужно использовать приведение типов. Это сообщение отредактировал(а) agl - 13.3.2007, 15:53 |
||||||
|
|||||||
| Tror |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
очень просто
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
||||
|
|||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
ИМХО, надо писать какую версию студиии/framework использует
А то путаница. 2Tror У тебя код для framework 2.0? |
|||
|
||||
| ClockWork |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Всем спасибо за советы. Действительно просто.
хм.. Да, у меня стоит framework 2.0. Просто я мало еще об этом читал.. Что, есть принципиальные различия между разными фреймворками? Это уже оффтоп, но все-же. |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
ну да ведь generic'и появились во втором framework'е
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |