如何将TreeNodeCollection转换为List<TreeNode>?
解决TreeNodeCollection转List的强制转换异常问题
我来帮你搞定这个问题!你遇到的这个强制转换异常,根源在于TreeNodeCollection并没有实现泛型的ICollection
先回顾下你的代码和抛出的异常:
你的代码:
ICollection tnc = treeview1.Nodes; ICollection<TreeNode> tn = (ICollection<TreeNode>)tnc; List<TreeNode> list = new List<TreeNode>(tn);
运行时抛出异常:
无法将类型为“System.Windows.Forms.TreeNodeCollection”的对象强制转换为类型“System.Collections.Generic.ICollection`1[System.Windows.Forms.TreeNode]”。
这里有几种简单有效的解决方案:
方案1:使用LINQ的OfType()扩展方法
这个方法会筛选出集合中所有TreeNode类型的元素(其实这里所有元素都是TreeNode),然后直接转成List:
using System.Linq; // 记得添加这个命名空间 List<TreeNode> list = treeview1.Nodes.OfType<TreeNode>().ToList();
方案2:使用LINQ的Cast()扩展方法
如果你能确定TreeNodeCollection里的所有元素都是TreeNode(实际情况确实如此),可以用Cast直接转换类型:
using System.Linq; // 同样需要添加LINQ命名空间 List<TreeNode> list = treeview1.Nodes.Cast<TreeNode>().ToList();
方案3:手动遍历添加(无需LINQ)
如果不想依赖LINQ,也可以手动遍历TreeNodeCollection,把每个节点添加到List里:
List<TreeNode> list = new List<TreeNode>(); foreach (TreeNode node in treeview1.Nodes) { list.Add(node); }
这三种方法都能完美解决你的转换问题,选哪种全看你的代码习惯啦~
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

