我有一个treenode集合作为IEnumerable<treenode>
个节点。是否有任何方法直接从节点创建treenode.guid
的集合而不迭代所有元素?
E.g:
guidcollection nodeguids = nodes.somemethod();
答案 0 :(得分:3)
答案不是 - 如果您需要从每个节点收集一些信息,您显然需要遍历节点集合。但是你可以这样做:
IEnumerable<Guid> nodeguids = nodes.Select(n => n.Id);
这样您至少不会手动执行迭代。虽然Select
的实现涉及对集合的所有元素进行迭代,但此时您将尝试在某处使用nodeguids
集合。
答案 1 :(得分:0)
LINQ使用惰性迭代器。所以你可以创建这样的集合......
IEnumerable<TreeNode> myCollection = GetTreeNodes();
IEnumerable<Guid> guidCollection = myCollection.Select(tn => tn.Guid);
guidCollection将不会被填充,直到它被迭代,计数,以某种方式行动。
你也可以去上学。
function IEnumerable<Guid> GetIdsFromCollection(TreeNode collection)
{
foreach (var item in collection)
yield return item;
}