You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TreeNodeCollection转换为List<TreeNode>?

解决TreeNodeCollection转List的强制转换异常问题

我来帮你搞定这个问题!你遇到的这个强制转换异常,根源在于TreeNodeCollection并没有实现泛型的ICollection接口——它是WinForms里的老集合类,诞生于.NET泛型特性出现之前,只支持非泛型的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:53