Преобразовать коллекцию TreeNodeCollection в список <TreeNode> - PullRequest
0 голосов
/ 24 мая 2018

Как я могу преобразовать 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 ]

0 голосов
/ 07 июня 2018

Вы можете сгладить 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);
0 голосов
/ 24 мая 2018

Одно решение:

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

Другое:

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

foreach Loop:

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