创建集合中所有元素的特定属性的集合,而不迭代该集合的元素

时间:2012-10-29 12:48:13

标签: c# linq collections

我有一个treenode集合作为IEnumerable<treenode>个节点。是否有任何方法直接从节点创建treenode.guid的集合而不迭代所有元素?

E.g:

guidcollection nodeguids = nodes.somemethod();

2 个答案:

答案 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;
}