У меня есть два рекурсивных метода, которые предназначены для проверки / снятия отметки всех TreeNodes
в .NET TreeView
Методы очень просты:
private void SetAllNodes(TreeNode rootNode, bool value)
{
rootNode.Checked = value;
foreach (TreeNode node in rootNode.Nodes)
SetAllNodes(node, value);
}
private void SetAllNodes(TreeView root, bool value)
{
foreach (TreeNode node in root.Nodes)
SetAllNodes(node, value);
}
Я называю это так:
SetAllNodes(this.myTreeView, true);
В любом случае, какое-то время это работало нормально, но внезапно я получил null reference exception
.После некоторой отладки я заметил, что во время цикла foreach
функции second примерно на второй итерации возвращается null
TreeNode
.
Еще более странно,если я заменю цикл foreach
следующим кодом, ошибка исчезнет:
for (int i = 0; i < root.Nodes.Count; i++)
{
TreeNode node = root.Nodes[i];
SetAllNodes(node, value);
}
Есть идеи, почему это происходит?Я отладил столько, сколько смог, но простой факт заключается в том, что я получаю элемент null
из моего цикла foreach
.
Edit По запросу, воттрассировка стека:
MyProgram.exe!MyProgram.UI.frmFilter.SetAllNodes(System.Windows.Forms.TreeNode rootNode = null, bool value = false) Line 457 + 0x7 bytes C#
MyProgram.exe!MyProgram.UI.frmFilter.SetAllNodes(System.Windows.Forms.TreeView root = {System.Windows.Forms.TreeView}, bool value = false) Line 450 + 0x6a bytes C#
MyProgram.exe!MyProgram.UI.frmFilter.btnNone_Click(object sender = {Text = "None"}, System.EventArgs e = {X = 36 Y = 5 Button = Left}) Line 604 C#
[External Code]
MyProgram.exe!MyProgram.Program.Main(string[] args = {string[0]}) Line 33 + 0x1d bytes C#
[External Code]