0

我有一个树节点集合作为IEnumerable<treenode>节点。有什么方法可以treenode.guid直接从节点创建集合而不迭代所有元素?

例如:

guidcollection nodeguids = nodes.somemethod();
4

2 回答 2

3

答案不是——如果您需要每个节点的一些信息,您显然需要遍历节点集合。但是,您可以执行以下操作:

IEnumerable<Guid> nodeguids = nodes.Select(n => n.Id);

这样,您至少不会手动执行迭代。虽然实现Select涉及对集合的所有元素进行迭代,但它会在您尝试在nodeguids某处使用集合的那一刻完成。

于 2012-10-29T12:52:19.767 回答
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;
}
于 2012-10-29T12:52:01.883 回答