我有一个树节点集合作为IEnumerable<treenode>
节点。有什么方法可以treenode.guid
直接从节点创建集合而不迭代所有元素?
例如:
guidcollection nodeguids = nodes.somemethod();
我有一个树节点集合作为IEnumerable<treenode>
节点。有什么方法可以treenode.guid
直接从节点创建集合而不迭代所有元素?
例如:
guidcollection nodeguids = nodes.somemethod();
答案不是——如果您需要每个节点的一些信息,您显然需要遍历节点集合。但是,您可以执行以下操作:
IEnumerable<Guid> nodeguids = nodes.Select(n => n.Id);
这样,您至少不会手动执行迭代。虽然实现Select
涉及对集合的所有元素进行迭代,但它会在您尝试在nodeguids
某处使用集合的那一刻完成。
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;
}