I use a "LINQ Where" query to identify some nodes in a tree. This returns an iterator of Tree Nodes that match the where criteria. I delete those nodes and when I check the contents of the LINQ iterator, it contains nodes which were not part of the LINQ query.
Specifically the application does the following:
- convert a list of folder paths to a simple tree structure
- use LINQ to select terminating paths (folders with no sub-folders)
- convert/copy the linq iterator to a List<Node> using "toList()"
- loop over the list and delete these nodes from the tree
- >> After processing, the LINQ iterator contains 2 nodes
The folder list resembles the following
"\base",
"\base\001",
"\base\001\cfg",
"\base\001\cfg\network",
"\base\001\cfg\network\mgmnt", // terminating leaf
"\base\001\cfg\network\users", // terminating leaf
"\base\002",
"\base\002\copy",
"\base\002\copy\cfg",
"\base\002\copy\cfg\network",
"\base\002\copy\cfg\network\mgmnt", // terminating leaf
"\base\002\copy\cfg\network\users", // terminating leaf
The LINQ iterator identifes 4 nodes (because these folders have no sub-folders)
"\base\001\cfg\network\mgmnt"
"\base\001\cfg\network\users"
"\base\002\copy\cfg\network\mgmnt"
"\base\002\copy\cfg\network\users"
If I inspect the LINQ iterator after deleting these 4 nodes from the tree, the iterator now contains 2 nodes
"\base\002\copy\cfg\network"
"\base\001\cfg\network"
I would have expected the iterator to be empty.
How does this happen???
Code Attached.