代码之家  ›  专栏  ›  技术社区  ›  user366312

将TreeNodeCollection转换为List<TreeNode>

  •  1
  • user366312  · 技术社区  · 7 年前

    我怎么转换 TreeNodeCollection List<TreeNode> ?

    这不管用。

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   Reza Aghaei    7 年前

    你可以压扁 TreeNodeCollection 使用以下在.NET 2.0中写入的帮助程序类:

    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);
    
        2
  •  0
  •   Hossein Golshani    7 年前

    一种解决方案是:

    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);