![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Idsa |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Всегда считал, что в C# при вот таком объявлении:
область видимости i - внутри цикла. Вот такая структура тоже работает вполне нормально:
Но почему-то ![]()
Пасиму? ![]() |
||||||
|
|||||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
так строка "int i = 0;" сделает так, что во втором for'e уже будет не объявление переменной с областью видимости только внутри цикла, а будет редекларация "внешней" по отношению к циклу переменной.
И ошибка, скорее всего, звучит так: "redeclaring of variable i". Добавлено через 1 минуту и 34 секунды
Ну, так у тебя в коде
внутри цикла находятся только пустые строки 2 и 5. А строка с инициализацией(3) - вне обоих циклов. |
||||||
|
|||||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Нельзя перекрывать локальную переменную другой с таким же именем.
Точные правила надо смотреть в спецификации… -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Прошу прощения: приведенный сначала нерабочий код неработает по вполне понятным причинам, а вот мне интересно, почему не работает вот это кусок:
Это сообщение отредактировал(а) Idsa - 17.4.2007, 17:35 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ответ, вероятно, искать нужно в спецификации C#. Лично мне самому интересно, какая причина того что переменную цикла нельзя объявлять вне оператора for.
-------------------- ![]() |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
SLeN |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 8.12.2006 Где: SPB Репутация: 2 Всего: 4 |
Объявить то можно, только до цикла.
Прекрасно пройдет. Но вот после объявления в for ее уже не объявить хотя и считается что ее нет в области видимости
Так компилятор ругается что она уже обвленна
а так не верит в ее существование прикольно ![]() --------------------
Православные не проходите мимо! Люди нуждаются в вас |
||||||||
|
|||||||||
Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
Ага.
Почему переменная цикла? Насколько я помню, еще по Си, переменная объявленная в теле цикла является локальной переменной всей функции. Перекрыть локальную переменную можно такой же(с тем же именем) но объявленной глобально. Или в C# это не должно соблюдаться? Это называется, если не изменяет память, - multiple declaration. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
В Вижуал С++ такая же байда и это совсем не весело. Потому что на самом деле ничего не перекрывается. Одна переменная принадлежит одному циклу, другая другому, какое может быть пересечение?
gcc нормально обращается с этим, ява компилер тоже. |
|||
|
||||
Retro |
|
|||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
Действительно, в БорландСи такое:
компилится на ура. А в студии(на C#) нифига, пишет - The name 'i' does not exist in the current context. Что творится? Добавлено через 1 минуту и 38 секунд Рано я радовался, что C# так похож на С, нюансы, однако, прорисовываются. Будем учить. |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 3 Всего: 154 |
MS учит программистов правилам хорошего кода.
-------------------- |
|||
|
||||
Retro |
|
||||||
![]() Диалектик ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1934 Регистрация: 28.6.2005 Где: Киев Репутация: 9 Всего: 117 |
Вот, ругается -
Добавлено через 3 минуты и 12 секунд На хелп ошибки выдает:
|
||||||
|
|||||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Вот в Яве точно помню, что с этим проблем не было, а вот в C++ 3.1 (просто для примера ![]() Чисто теоретически возможны 2 варианта: 1. переменная, объявленная в цикле, видима только в цикле 2. переменная, объявленная в цикле, видима во всем методе. C# же смешивает 2 эти варианта ![]() |
|||
|
||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
вот так отрабатывает корректно
![]()
Это сообщение отредактировал(а) Wanderer2019 - 18.4.2007, 09:30 |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Это скорее MS, а не разница C / C# Не понимаю, что в этом случае хорошего ![]() Спасибо! Наглядный пример, что задумано так, а реализовано эдак ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |