【发布时间】:2017-03-10 20:21:37
【问题描述】:
我有一个递归方法,可以使用一种索引设置节点 ID,我一直在努力挠头,因为它一直抱怨我有重复的 ID。
我确定整数类型是按值传递的,所以我不确定这里有什么问题。
IList<DocumentNode> contents = new List<DocumentNode>();
int index = 0;
LoadContents(null, index++, result, contents);
private void LoadContents(DocumentNodeparentNode, int nodeId, WordContent wordContent, IList<DocumentNode> contents)
{
foreach (OtheClassContent childContent in wordContent.ChildrenContent)
{
var node = new DocumentNodeViewModel(nodeId,
parentNode?.NodeId,
childContent.SortOrder,
childContent.Depth);
contents.Add(node);
nodeId++;
LoadContents(node, nodeId, childContent, contents);
}
}
// This line wont work
IDictionary<int, int?> myDictionary = contents.ToDictionary(a => a.Id, a => a.ParentId);
文档节点是简单的树节点结构
public class DocumentNode
{
public DocumentNode(
int nodeId,
int? parentNodeId,
short sortOrder,
short branchLevel)
{
NodeId = nodeId;
SortOrder = sortOrder;
BranchLevel = branchLevel;
ParentNode = null;
ParentNodeId = parentNodeId;
ChildNodes = Enumerable.Empty<DocumentNode>();
}
public int NodeId { get; private set; }
public int? ParentNodeId { get; private set; }
public short SortOrder { get; private set; }
public DocumentNode ParentNode { get; set; }
public IEnumerable<DocumentNode> ChildNodes { get; set; }
public short BranchLevel { get; private set; }
}
有谁知道我做错了什么?
【问题讨论】:
-
示例:您使用
nodeID= 3 创建节点并递增到 4。然后递归调用创建节点 4、5、6。但回到原来的nodeID仍然是 4。循环继续,您创建节点 4 - 但它已经创建。如果您通过ref传递nodeID,问题就解决了。
标签: c# .net recursion data-structures tree