![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Всем привет!
Столкнулся с такой проблемой. У меня есть два цикла один из них вложенный. Внутри вложенного цикла через switch проверяется некоторое условие, при наступлении одного из условий в switch определяется необходим ли дальнейши сбор информации, т.е. в одном из case переключателя находится проверка условия через if. Врочем наверное будет всё гораздо понятнее, если посмотреть на код.
Собственно из коментариев понятно, что в блоке else необходимо сделать либо прерывание внутреннего цикла, либо досрочно перейти к следующей итерации внешнего цикла. С прерыванием внутреннего цикла не возникло бы проблем, если заменить переключатель switch на условную конструкцию if ... else if ... else if ... else, так как в моём случае break прерывает не цикл, do .. while, а переключатель switch. Логически здесь подходит именно switch. Я хотел сказать, что не нужно предлагать заменить switch на if ... else if ... else if ... else. Я знаю что нужно, но не понял как это делается в С#. В Java я бы пометил внутренний цикл, после чего прервал бы его по метке, в C# с этим возникли проблемы. :(((((( Вот, как бы это выглядело на Java:
Так же можно было бы добавить и метку к внешнему циклу например OUTER, после чего при наступлении условия перейти к следующей итерации с помощью continue OUTER, предварительно ункрементировав переменную внешнего цикла. Вобщем мне нужно добиться идентичного результата, но только в C#. Нашёл в Google, что это нужно делать с помощью goto, но пока не разобрался, каким образом goto может прервать цикл. Попутно продолжу поиски. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
пример для goto:
а вообще наверно стоит обернуть в функию и делать return -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| i2m |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 4.5.2010 Репутация: нет Всего: 1 |
Если я вас правильно понял, то наверное так.
PS согласен с jonie, вообще goto зло, если возможно сделать без него, то нужно делать. Это сообщение отредактировал(а) i2m - 30.11.2010, 18:32 |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
не уверен что до конца понял что требуется, но мне кажется очевидным было бы ввести переменную bool. сразу делать ее true, а когда надо выйти из цикла делать ее false. в условии цикла проверять ее.
Добавлено через 1 минуту и 19 секунд что то теги цвета не срабатывают, но думаю что мысль понятна... |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: нет Всего: 61 |
Большое спасибо, всем. Использовал прерывание с меткой которое предложил i2m.
boolean флаг в данном контексте лишняя переменная + лишняя проверка на каждой итерации. Собственно метки для того и нужны.
Не думаю, что с помощью этого goto получится сделать скачёк в любую точку программы. Злом goto считается именно из-за этого. Насколько я понял, он вообще в C# применяется для прерывания внешних циклов и скачков по конструции switch. Это сообщение отредактировал(а) korob2001 - 1.12.2010, 11:25 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |