#c#
#c#
Вопрос:
Я написал вложенный цикл для добавления узлов дерева, проблема в том, что индекс i никогда не увеличивается до 1.
В для каждого цикла: там, где в первом родительском узле больше нет дочерних узлов, цикл останавливается в индексе j и не возвращается к индексу i для увеличения до 1.
for (int i = 0; i < 23; i )
{
for (int j = 0; j < 23; j )
{
foreach (var item in myDictionaryReconstructed)
{
if ("TreeNode: " item.Key == treeView1.Nodes[i].Nodes[j].ToString())
{
treeView1.Nodes[i].Nodes[j].Nodes.Add(item.Value);
treeView1.ExpandAll();
}
}
}
}
Например:
Родительский узел 1 — подузел 1 — Подузел 2 — Подузел 3
Родительский узел 2 — подузел 1 —
Родительский узел 3 — подузел 1
Программа выполняется до родительского узла — 1 и подузла 3. Когда проверяется подузел 4, и он не найден, программа просто останавливается там, вместо того, чтобы переходить к следующему родительскому узлу.
Исключение: указанный аргумент находился вне диапазона допустимых значений индекса имени параметра.
Ответ на дубликат: после обсуждения позже я нашел исключение выше, мой вопрос был опубликован ранее, прежде чем я не знал, что это исключение индекса.
Комментарии:
1. можете ли вы предоставить какой-либо вывод или что-то еще, что может помочь?
2. Что-то в этом не так. Вы уверены, что внутренние циклы действительно завершены?
3. Как вы пришли к такому выводу? Во время отладки? Было бы полезно, если бы вы предоставили примерную структуру
Tree
и элементы внутриmyDictionaryReconstructed
. Кроме того, вы уверены, что у вас нет какого-либо исключения?4. У вас действительно есть 22 узла, и у каждого есть 22 подузла? Если нет, вы получите исключение
5. @OfirWinegarten У меня 22 узла, и у каждого узла есть 2-3 подузла.
Ответ №1:
Согласно нашему обсуждению в комментариях выше,
Следующий код выдает ArgumentOutOfRangeException
treeView1.Nodes[i].Nodes[j]
Когда i
или j
больше, чем количество узлов, которые у вас на самом деле есть, возникает исключение, как это было бы с любым другим массивом.
Вы могли бы сделать это с foreach
помощью или вместо использования магического числа (23) Nodes.Count
.
Итак, ваш код может выглядеть следующим образом:
for (int i = 0; i < treeView1.Nodes.Count; i )
{
for (int j = 0; j < treeView1.Nodes[i].Nodes.Count; j )
{
foreach (var item in myDictionaryReconstructed)
{
if ("TreeNode: " item.Key == treeView1.Nodes[i].Nodes[j].ToString())
{
treeView1.Nodes[i].Nodes[j].Nodes.Add(item.Value);
treeView1.ExpandAll();
}
}
}
}