Delirium
14-09-2010, 09:00
Имеем такой кусочек кода:
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 { }
Суть проста - имеется 2 TreeView, которые заполняются данными из XML. Заметил одну непонятку:
Цикл XmlNode node in doc.SelectNodes("//Computer")
Согласно области видимости, переменная node должна видиться только в пределах первого цикла foreach и после окончания работы цикла переменная уничтожается.
Но на самом деле, если использовать приведенный выше код, то увидим, что во втором цикле foreach переменная node уже имеет значения из первого цикла (значение Computer вместо UserName. Заменим название переменной во втором коде на node2 все работает без проблем.
И, собственно, вопрос - в цикле foreach по другому считается область видимости переменных или это какой то баг?
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 { }
Суть проста - имеется 2 TreeView, которые заполняются данными из XML. Заметил одну непонятку:
Цикл XmlNode node in doc.SelectNodes("//Computer")
Согласно области видимости, переменная node должна видиться только в пределах первого цикла foreach и после окончания работы цикла переменная уничтожается.
Но на самом деле, если использовать приведенный выше код, то увидим, что во втором цикле foreach переменная node уже имеет значения из первого цикла (значение Computer вместо UserName. Заменим название переменной во втором коде на node2 все работает без проблем.
И, собственно, вопрос - в цикле foreach по другому считается область видимости переменных или это какой то баг?