我有一组节点,每个节点都可以有一个父节点。如果父节点存在,我想将其作为子节点插入(即:父节点将成为它自己的子节点)但是如果可能的话,我很难找到一种方法来实现这一点。
我的非linq尝试:
private IList<IPageNode> addParentNode(IList<IPageNode> nodes) {
if (nodes[0].parent == null) return nodes;
var parentWithoutChildren = new PageNode {
name = nodes[0].parent.name,
isNavigable = nodes[0].parent.isNavigable,
url = nodes[0].parent.url,
children = null,
parent = null
};
nodes.Insert(0, parentWithoutChildren);
return nodes;
}
到目前为止,我的工作有两个问题:
答案 0 :(得分:2)
嗯,问题是:你想要返回一个包含相同对象的不同列表(可能还有一个)或者你想返回一个新的新对象列表吗?
假设前者:
public static IEnumerable<IPageNode> WithClonedParent(this IList<IPageNode> list)
{
var newParent = list.First().CloneParentIfSet();
if (newParent)
{
yield return newParent;
}
foreach (var node in list)
{
yield return node;
}
}
CloneParentIfSet
可以是IPageNode
的扩展方法,可以执行您当前在new PageNode
语句中执行的操作。
然后您可以像这样使用它:nodes.WithClonedParent()
这将是一个新的集合。
不一定更有效但可能更优雅(恕我直言)。