|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Перекрытие области видимости в цикле foreach |
|
.NET - Перекрытие области видимости в цикле foreach
|
Ветеран Сообщения: 5624 |
Профиль | Отправить PM | Цитировать Имеем такой кусочек кода:
XmlDocument doc = new XmlDocument(); XmlDocument docTemplate = new XmlDocument(); try { doc.Load("LocalUsers.xml"); TreeNode t1; foreach (XmlNode node in doc.SelectNodes("//Computer")) { t1 = new TreeNode(node.Attributes["Name"].Value); treeAll.Nodes[0].Nodes.Add(t1); } treeAll.Nodes[0].ExpandAll(); } catch { } try { docT.Load("Template.xml"); TreeNode tt; foreach (XmlNode node in docTemplate.SelectNodes("//UserName")) { tt = new TreeNode(node.InnerText); treeTemplate.Nodes.Add(tt); } treeTemplate.Nodes[0].ExpandAll(); } catch { } Цикл Согласно области видимости, переменная node должна видиться только в пределах первого цикла foreach и после окончания работы цикла переменная уничтожается. Но на самом деле, если использовать приведенный выше код, то увидим, что во втором цикле foreach переменная node уже имеет значения из первого цикла (значение Computer вместо UserName. Заменим название переменной во втором коде на node2 все работает без проблем. И, собственно, вопрос - в цикле foreach по другому считается область видимости переменных или это какой то баг? |
|
------- Отправлено: 09:00, 14-09-2010 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать С областью видимости всё в силе: вне foreach переменная не видима. Предположение: другое дело что компилятор"увидев" знакомую "картину" решает не списывать переменную. Возможно с помощью Garbage Collector данную ситуацию можно отрегулировать.
Более простой пример using System; class Some { public static new void Main() { int[] a = new int[] { 1, 2, 3 }; int[] b = new int[] { -1, -2, -3 }; foreach (int i in a) { System.Console.WriteLine(i); } foreach (int i in b) { System.Console.WriteLine(i); } } } Если с XML вариантом так не происходит, и значения из предыдущего цикла добавляются в TreeView, то можно посчитать что это баги при использовании с XML. |
Отправлено: 16:25, 17-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
|
|
------- Отправлено: 02:06, 18-09-2010 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Обработать два текстовых файла в одном цикле: как? | grinsen | Скриптовые языки администрирования Windows | 1 | 27-02-2010 03:33 | |
Разное - wi-fi и 3 метра вне прямой видимости | Bright | Прочее железо | 1 | 11-05-2009 14:22 | |
FreeBSD - Перекрытие конфигов POSTFIX | kryo | Общий по FreeBSD | 2 | 12-11-2008 11:39 | |
Повтор в цикле команды XCopy | babki | Программирование и базы данных | 6 | 29-11-2005 10:22 | |
Перекрытие flash’ом слоя div, параметр z-index не помогает. | Irlon | Вебмастеру | 6 | 18-11-2005 18:13 |
|