【问题标题】:Convert TreeNodeCollection to List<TreeNode>将 TreeNodeCollection 转换为 List<TreeNode>
【发布时间】:2018-05-24 00:04:47
【问题描述】:

如何将TreeNodeCollection 转换为List&lt;TreeNode&gt;

这不起作用。

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]'。

【问题讨论】:

  • 为什么需要?
  • @SamAxe,树搜索。
  • 如果没有 LINQ,您将陷入 for 循环(或变体)。

标签: c# winforms .net-2.0


【解决方案1】:

一种解决方案是:

List<TreeNode> treeNodeList = treeNodeCollection.OfType<TreeNode>().ToList();

另一个:

List<TreeNode> treeNodeList = treeNodeCollection.Cast<TreeNode>().ToList();

foreach 循环:

List<TreeNode> treeNodeList = new List<TreeNode>();
foreach (TreeNode item in treeNodeCollection)
    treeNodeList.Add(item);

【讨论】:

  • 需要.net 2.0。
  • 使用 foreach 循环
【解决方案2】:

您可以使用以下用 .NET 2.0 编写的帮助程序类来展平 TreeNodeCollection

using System.Collections.Generic;
using System.Windows.Forms;
public class NodeHelper
{
    public static List<TreeNode> ToList(TreeNodeCollection nodes)
    {
        List<TreeNode> list = new List<TreeNode>();
        foreach (TreeNode node in ToIEnumerable(nodes))
            list.Add(node);
        return list;
    }
    public static IEnumerable<TreeNode> ToIEnumerable(TreeNodeCollection nodes)
    {
        foreach (TreeNode c1 in nodes)
        {
            yield return c1;
            foreach (TreeNode c2 in ToIEnumerable(c1.Nodes))
            {
                yield return c2;
            }
        }
    }
}

例如,以下代码会将treeView1的整个节点层次结构扁平化为一个列表:

List<TreeNode> list = NodeHelper.ToList(treeView1.Nodes);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多