public void FillLink(TypeOfActionXml typeOfActionXml) { if (LinkTags != null) { var dicToCompail = LinkTags.ToDictionary(l => l.Tag, l => l); // заполняем дерево ссылками на следующие и предыдущие элементы foreach (var l in LinkTags) { LiteratureTag nextTag = null; dicToCompail.TryGetValue(l.Ref, out nextTag); if (nextTag != null && l.PreviousNode == null && (l.NextNodeEmpty() && typeOfActionXml == TypeOfActionXml.Separete || typeOfActionXml == TypeOfActionXml.UnionTree)) { nextTag.AddNextNode(l); l.PreviousNode = nextTag; } } //разрываем циклическую ссылку if (typeOfActionXml == TypeOfActionXml.UnionTree) { if (LinkTags != null && LinkTags.Count > 0) { SeparateLink(LinkTags.First()); } } } }
// находим начало дерева public List <LiteratureTag> GetLinkedLists(TypeOfActionXml typeOfActionXml) { FillLink(typeOfActionXml); var linkedList = LinkTags?.Where(l => l.PreviousNode == null).ToList(); return(linkedList); }